我正在尝试制作类似于 HttpModule with ASP.NET MVC not being called
的解决方案如何过滤请求?如果请求是针对ASP.NET MVC操作,而不是针对* .gif,* .css等,我只想打开一个ISession。
我该如何处理此过滤?
答案 0 :(得分:2)
会话非常便宜创建,我不打算使用此过滤器。
从字面上看,打开一个ISession只是new SessionImpl(..)
的问题。如果会话中没有发生任何事情,SessionImpl constructor和dispose不会做太多。
答案 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.
}
}