ASP.NET MVC每请求会话模式和IHttpModule
我正试图找到一个解决方案,就像 如何筛选请求?如果请求是ASP.NET MVC操作,而不是*.gif、*.css等,我只想打开ISessionASP.NET MVC每请求会话模式和IHttpModule,asp.net,asp.net-mvc,nhibernate,iis,Asp.net,Asp.net Mvc,Nhibernate,Iis,我正试图找到一个解决方案,就像 如何筛选请求?如果请求是ASP.NET MVC操作,而不是*.gif、*.css等,我只想打开ISession 如何处理此筛选?您可以将managedHandler先决条件添加到模块中。但是我不知道它是否适合ASP.NETMVC,因为静态文件通过路由传递 无论如何,您可以尝试以下方法: <add name="RequestTimer" type="MySite.HttpModule.RequestTimeModule, MySite" preconditio
如何处理此筛选?您可以将managedHandler先决条件添加到模块中。但是我不知道它是否适合ASP.NETMVC,因为静态文件通过路由传递 无论如何,您可以尝试以下方法:
<add name="RequestTimer" type="MySite.HttpModule.RequestTimeModule, MySite" precondition="managedHandler" />
HTHs,
Charles会话的创建成本非常低,我不想使用这个过滤器
从字面上说,打开一个会话只是一个简单的问题。SessionImpl,如果会话中没有发生任何事情,则不要做太多。您可以使用以下方法:
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.
}
}
也许我应该制作一个ActionFilter并将其添加到每个控制器中。但是我喜欢httpmodule的想法,你有没有试着加入前置条件?到底是干什么用的?你能用另一种方法解决吗?不,我没有试过先决条件。我会提出另一个解决方案。正如Mauricio在下面所描述的,ISession的创建成本很低,如果您没有点击db,那么根本就不会建立连接。我仍然不喜欢创建我不会使用的对象。我将以另一种方式创建UnitOfWork,可能会使用一些actionfilter