2009-09-07 16 views
11

Estoy tratando de implementar un patrón de sesión por solicitud en una aplicación ASP.NET MVC 2 Preview 1, y he implementado un IHttpModule para ayudarme a hacer esto:HttpModule con ASP.NET MVC sin llamar

public class SessionModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.Response.Write("Init!"); 
     context.EndRequest += context_EndRequest; 
    } 
    // ... etc... 
} 

Y he puesto esto en el web.config: "Init"

<system.web> 
    <httpModules> 
     <add name="SessionModule" type="MyNamespace.SessionModule" /> 
    </httpModules> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="SessionModule" /> 
     <add name="SessionModule" type="MyNamespace.SessionModule" /> 
    </modules> 

Sin embargo, nunca se escribe en la página (estoy usando el servidor web incorporado de VS, Cassini). Además, he intentado poner puntos de ruptura en el SessionModule pero nunca se rompen. ¿Qué me estoy perdiendo?

Respuesta

14

Resulta que hay un archivo Web.config en la carpeta Vistas y uno en la raíz. ¿Adivina en cuál he registrado los httpModules? Sí, la carpeta de Vistas uno. Lo moví a la raíz Web.config y ahora funciona como un encanto.

+2

+1 porque eso es exactamente lo que hice y esto fue lo que me llevó a solicitar una verificación doble:/ –

+3

Aún no lo hice, pero estaba obligado a hacerlo. +1 – Dave

1

Es posible que deba colocar Response.Write en el método que se suscribe al evento EndRequest (o BeginRequest). Supongo que el objeto Response no se ha inicializado por completo en la etapa Init.

+0

Esto no funcionó -> var app = (HttpApplication) remitente; app.Context.Response.Write ("EndRequest!"); –

1

Mi problema era que tenía [HandleError] en el método del controlador, que detectaba el error antes de que mi controlador de error personalizado tuviera la oportunidad de hacerlo.