Global.asax魔术function

在Visual Studio中创建ASP.NET Mvc项目时,将创建Global.asaxGlobal.asax.cs 。 在此.cs文件中,您将找到标准的Application_Start方法。

我的问题如下,如何调用此函数? 因为它不是覆盖。 所以我的猜测是这个方法名称是按照惯例。 Application_Error方法也是如此。

我想知道这些方法的钩子在哪里。 因为我编写这些方法(不覆盖它们),我在MSDN中找不到任何关于它们的文档。 (我找到了这个页面,但它只是告诉你挂钩Error事件并显示一个Application_Error(object sender, EventArgs e)但不显示事件和方法是如何链接的。)

 //Magicly called at startup protected void Application_Start() { //Omitted } //Magicly linked with the Error event protected void Application_Error(object sender, EventArgs e) { //Omitted } 

它并不是真正神奇的…… ASP.NET Pipeline将所有这些都连接起来。

您可以在此处查看有关此文档的文档 。

具体来说,您将对以下部分感兴趣:

HttpApplication对象分配给请求。

其中包括触发事件列表以及按什么顺序排列的事件列表。

该页面上有链接(此处包含的内容太多),链接到包含更多信息的各种其他页面。


ASP.NET使用命名约定Application_event(例如Application_BeginRequest自动将应用程序事件绑定到Global.asax文件中的处理Application_BeginRequest 。 这类似于ASP.NET页面方法自动绑定到事件的方式,例如页面的Page_Load事件。

来源 : http : //msdn.microsoft.com/en-us/library/ms178473.aspx

ASP.Net本身创建它。 以下是根据MSDN的流程 –

  • 用户从Web服务器请求应用程序资源。
  • ASP.NET收到应用程序的第一个请求。
  • 为每个请求创建ASP.NET核心对象。
  • 将HttpApplication对象分配给请求。 在此步骤中,将处理Global.asax并自动关联事件。
  • 该请求由HttpApplication管道处理。 在此步骤中,将引发HttpApplication Global事件。

这是参考 – ASP.Net应用程序生命周期。

从引用 – ASP.NET使用命名约定Application_event(例如Application_BeginRequest)自动将应用程序事件绑定到Global.asax文件中的处理程序。

为了揭开所接受答案的“魔力”的神秘面纱,ASP.Net管道将HttpApplication事件自动绑定到类中具有Application_EventName的方法。 如果(很像我)你宁愿看到显式绑定到处理程序的事件,可以通过重写HttpApplication.Init()绑定它们,Visual Studio将生成具有正确签名的处理程序方法。

 public override void Init() { this.BeginRequest += MvcAppliction_BeginRequest; } private void MvcApplication_BeginRequest(object sender, EventArgs e) { ... } 

这种绑定事件的方法有一个例子