事件处理程序只能在IHttpModule初始化期间绑定到HttpApplication事件

时间:2011-03-03 05:00:09

标签: asp.net httpmodule global-asax

我收到以下错误

'事件处理程序只能在IHttpModule初始化期间绑定到HttpApplication事件。在以下代码中(粗体或双**行)

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    **app.EndRequest += new EventHandler(Application_EndRequest);**        
}

protected void Application_EndRequest(object sender, EventArgs e)
{
    UnitOfWork.Commit();
}

在Global.asax文件中提到。有人可以弄清楚,我缺少的地方吗?感谢。

2 个答案:

答案 0 :(得分:7)

事件处理程序存在于应用程序的整个生命周期中,因此,您只需添加一次,而不是每次请求都添加它。事件本身将触发每个请求,每次引发事件时都会调用唯一的处理程序。

将其添加到global.asax中的Application_Start而不是Application_BeginRequest ,或者更好的是,创建一个HTTP模块。

另外,我认为您甚至可能不需要事件处理程序。具有当前名称的方法将按类似于Page / Control AutoEventWireup(如Page_Load)的约定调用。请注意,有些人报告说,这可能会在ASP.NET MVC应用程序中出现问题。所以,我的建议是重命名该函数,在Application_Start中添加事件处理程序,或者更好地在您创建的新HTTP模块中

答案 1 :(得分:3)

尝试注释掉标有“**”的行。如果遵循命名约定,Asp.Net将自行调用适当的方法:“{Scope}”_“{Event}”,其中“{Scope}”是应用程序,如果你想处理应用程序级事件或“Session”,如果你想要处理会话级事件,“{Event}”是事件的名称,如Start,End等。 更多信息:http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages