Global.asax魔术功能

Syn*_*der 27 c# asp.net error-handling asp.net-mvc

在Visual Studio中创建ASP.NET Mvc项目时,将创建Global.asax&Global.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
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*ead 14

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

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

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

HttpApplication对象分配给请求.

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

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


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

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

  • 他们提到的最初的海报是神奇的.它们应该是抽象的(mustoverride),然后允许在global.asax文件中覆盖它们.有人记得这些东西的名称和签名??? (18认同)
  • 为什么有人会记得Api?我应该能够在从base继承时覆盖函数名. (13认同)
  • 这绝对是"神奇的".它们不是由接口或基类具体定义的.这很神秘. (12认同)
  • @SimonWhitehead但编译器不会告诉您MSDN上有关如何执行此自动事件连接的文档已更改.如果我们有一个适当的基类,我们可以依靠编译器和其他工具(例如Visual Studio)来帮助我们. (2认同)