gpt4 book ai didi

asp.net - 在没有 Global.asax 的情况下处理应用程序范围的事件

转载 作者:行者123 更新时间:2023-12-04 10:57:14 25 4
gpt4 key购买 nike

由于各种原因,我的项目没有“global.asax”,我无法更改它(它是一个组件)。此外,我无法访问 web.config,因此 httpModule 也不是一个选项。

有没有办法处理应用程序范围的事件 ,像这种情况下的“BeginRequest”?

我试过了,它没有用,有人能解释为什么吗?似乎是一个错误:

HttpContext.Current.ApplicationInstance.BeginRequest += MyStaticMethod;

最佳答案

不,这不是错误。事件处理程序只能绑定(bind)到 HttpApplication IHttpModule 期间的事件初始化并且您尝试将其添加到 Page_Init 中的某处(我的假设)。

因此,您需要动态注册一个带有所需事件处理程序的 http 模块。如果您在 .NET 4 下,有一个好消息 - 有 PreApplicationStartMethodAttribute属性(引用:Three Hidden Extensibility Gems in ASP.NET 4):

This new attribute allows you to have code run way early in the ASP.NET pipeline as an application starts up. I mean way early, even before 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")]

关于asp.net - 在没有 Global.asax 的情况下处理应用程序范围的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com