asp.net iis-7 httpmodule integrated-pipeline-mode

asp.net - HttpModule personalizado para IIS 7 para integrado



iis-7 integrated-pipeline-mode (3)

Por lo que puedo ver, estás en el camino correcto. ¿Se ha asegurado de que el grupo de aplicaciones de su sitio esté configurado en el modo de canal gestionado?

Además, si está probando esto con el servidor web integrado de Visual Studio (Cassini), entonces se ignorará la sección <system.webServer> . Necesitará IIS7 o IIS7.5 Express si desea que el módulo se cargue desde allí.

Tengo problemas con un controlador de errores personalizado que construí. Debe ser un HttpModule , pero cuando lo agrego a la etiqueta system.webServer/modules mi web.config , no se inicia.

Esta es mi sección web.config :

<system.webServer> <modules> <add name="AspExceptionHandler" type="Company.Exceptions.AspExceptionHandler, Company.Exceptions" preCondition="managedHandler" /> </modules> </system.webServer>

Este es el código en mi HttpModule :

using System; using System.Web; using Company.Settings; using System.Configuration; namespace Company.Exceptions { public class AspExceptionHandler : IHttpModule { public void Dispose() { } public void Init(HttpApplication application) { application.Error += new EventHandler(ErrorHandler); } private void ErrorHandler(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext currentContext = application.Context; // Gather information5 Exception currentException = application.Server.GetLastError(); String errorPage = "http://www.mycompaniesmainsite.com/error.html"; HttpException httpException = currentException as HttpException; if (httpException == null || httpException.GetHttpCode() != 404) { currentContext.Server.Transfer(errorPage, true); } else { application.Response.Status = "404 Not Found"; application.Response.StatusCode = 404; application.Response.StatusDescription = "Not Found"; currentContext.Server.Transfer(errorPage, true); } } } }

¿Podría alguien explicarme por favor qué es lo que estoy haciendo mal y cómo funciona el modo de canalización integrada gestionada de IIS 7? Porque la mayoría de las respuestas que encontré tratan sobre la configuración de HttpModules para IIS 6.


Tuve este problema y descubrí que no apagar customErrors impedía que el controlador se disparara.

es decir: esto se requiere en su configuración para que el evento Error sea capturado en el HttpModule:

<system.web> <customErrors mode="Off" /> </system.web>


Estaba experimentando el mismo problema de un controlador que no se activa, haciendo el siguiente cambio al código anterior me ayudó a resolver este problema. En lugar de crear un nuevo controlador de eventos, simplemente adjunté el método con la misma firma a ese evento.

application.Error += ErrorHandler;

Esto funciona para mí, aún analizando cuál es la razón detrás de esta manera de adjuntar un controlador funciona en IIS7.