我在.net mvc 2 Web应用程序中每个http请求使用一个NHibernate UoW。我只是想知道如何跳过为图像等静态http请求创建UoW。
答案 0 :(得分:1)
您可以将您的工作单元实现转换为IActionFilter的实现,而不是HttpModule。所以OnActionExecuting你可以开始你的工作单元和OnActionExecuted你可以结束工作单元。然后将其应用于您的控制器和执行数据处理的操作。
答案 1 :(得分:0)
我不确定StaticFileHandler是否实际发出了Begin / EndRequest,但我猜不是。如果您注意到它是针对您的静态文件触发的,我认为您的处理程序顺序错误或处理程序的通配符错误。
如果将“*”映射到MVC处理程序,可能您可能需要将静态内容实际移动到子文件夹中并覆盖web.config并清除所有处理程序,并仅在其上添加StaticFileHandler。
我注意到你提到你为UoW使用IHttpModule,所以我猜你劫持了每个请求。
你可以这样做:
创建一个名为“/ static /”的子文件夹,并在此处移动静态文件。在该文件夹中,创建一个包含以下内容的web.config:
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Either" requireAccess="Script" />
</handlers>
并删除UoW模块(也许你只需要这一行)
<modules>
<remove name="YourUoWModuleName" />
</modules>
答案 2 :(得分:0)
您可以使用IRequiresSessionState标记界面。
private void BeginTransaction(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
if (app.Context.Handler is IRequiresSessionState) {
// do work
}
}
staticfilehandler不会将Session应用于请求。