每个请求模式的ASP.NET MVC会话和IHttpModule

时间:2010-01-09 23:23:38

标签: asp.net asp.net-mvc nhibernate iis

我正在尝试制作类似于 HttpModule with ASP.NET MVC not being called

的解决方案

如何过滤请求?如果请求是针对ASP.NET MVC操作,而不是针对* .gif,* .css等,我只想打开一个ISession。

我该如何处理此过滤?

3 个答案:

答案 0 :(得分:2)

会话非常便宜创建,我不打算使用此过滤器。

从字面上看,打开一个ISession只是new SessionImpl(..)的问题。如果会话中没有发生任何事情,SessionImpl constructordispose不会做太多。

答案 1 :(得分:1)

您可以将managedHandler前置条件添加到模块中。但我不知道它是否适合ASP.NET MVC,因为静态文件通过路由传递。

无论如何,你可以尝试类似的东西:

<add name="RequestTimer" type="MySite.HttpModule.RequestTimeModule, MySite" precondition="managedHandler" />

请点击此处了解详情 - IIS7 Preconditions

HTHS,
查尔斯

答案 2 :(得分:0)

您可以使用:

void IHttpModule.Init(HttpApplication context)
{
    context.PreRequestHandlerExecute += new System.EventHandler(context_PreRequestHandlerExecute);
}

然后你可以检查它是否是执行你的请求的MVC处理程序(类型MvcHandler):

 void context_PreRequestHandlerExecute(object sender, System.EventArgs e)
 {
     HttpContext context = ((HttpApplication)sender).Context;
     Type mvcht = typeof(System.Web.Mvc.MvcHandler);
     if (context.Handler != null && context.Handler.GetType().IsAssignableFrom(mvcht))
     {
         ..... Code goes here.
     }
 }