不,这不是一个错误。事件处理程序只能在IHttpModule
初始化期间绑定到HttpApplication
事件,并且您正试图将其添加到Page_Init
(我的假设)中的某处。
因此,您需要动态注册一个带有所需事件处理程序的http模块。如果你是在.NET 4有你一个好消息 - 有PreApplicationStartMethodAttribute
属性(参考:Three Hidden Extensibility Gems in ASP.NET 4):
这个新的属性可以让你有 代码运行在ASP.NET方式早 管道作为应用程序启动。 我的意思是路途早,甚至在 Application_Start
之前。
因此,剩下的事情很简单:你需要创建一个你想要的事件处理程序,模块初始化和属性你自己的HTTP模块,您AssemblyInfo.cs
文件。这里是一个模块,例如:
public class MyModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
public void Dispose()
{
}
void context_BeginRequest(object sender, EventArgs e)
{
}
}
要注册模块动态,你可以使用DynamicModuleUtility.RegisterModule
方法从Microsoft.Web.Infrastructure.dll
组件:
public class Initializer
{
public static void Initialize()
{
DynamicModuleUtility.RegisterModule(typeof(MyModule));
}
}
唯一剩下的东西是必要的属性添加到您的AssemblyInfo.cs
:
[assembly: PreApplicationStartMethod(typeof(Initializer), "Initialize")]