在asp.net-mvc中如何连接Application_BeginRequest()

我从asp.net-mvc项目中看到global.aspx.cs

protected void Application_BeginRequest() { } 

但是当我尝试将此添加到我的项目,我不明白是什么调用此方法。 我看到基地System.Web.HttpApplication有这个事件,但我没有看到任何重写或订阅此事件。

有人可以解释如何连接在asp.net-mvc的Application_BeginRequest?

恐怕Cos的答案不太准确。 你不必连接它,因为基本的HttpApplication类为你做。 这里没有一个接口或覆盖。 HttpApplication使用reflection来将这些方法挂接到基于方法名称的事件上。 所以在框架中已经有一段时间了。 这非常奇怪,我认为他们只是在今天保持与经典ASP的相似性,并且/或者提供了一个避免编写大量小型HttpModule的捷径。

为了好奇,在Reflector中加载HttpApplication ,并寻找HookupEventHandlersForApplicationAndModules()方法。 或者,加载HttpApplicationFactory并查看ReflectOnApplicationType()ReflectOnMethodInfoIfItLooksLikeEventHandler() (爱这个名字!)方法。

Rick Strahl几年前在他的博客上讨论过这个问题。

是否真的需要知道使用ASP.NET? 不,但知道它肯定会消除一些神秘的东西。

任何ASP.NET应用程序都是以下types的对象 (或类):

public class Global : System.Web.HttpApplication你会发现这在global.asax

由IIS调用的ASP.NET引擎创build对象的一个​​实例,HttpApplication接口要求Application_BeginRequest,由IIS调用(通过ISAPI)

当ASP.NET引擎创build你的类的一个实例时,它看起来像这样:

 HttpApplication thisAspApp = new YourASPApplication() thisApplication.Begin_Request() 

由于它将您的应用程序转换为派生types,因此可以直接访问已知接口而无需重写。 虽然HttpApplication是一个类,它正在通过铸造的方式被用作一个接口。 如果向类中添加新的方法(或属性),则ASP.NET引擎将无法访问该方法,因为它仅将您的应用程序视为通用HttpApplication。 在VS中,如果你去了global.asax并在类声明中右键单击HttpApplication并select“Go To Definition”(或按F12),就可以看到基类的结构。 (或者你可以在MSDN在线find它)。