在Visual Studio中创建ASP.NET Mvc项目时,Global.asax
&将创建Global.asax.cs
。在此.cs文件中,您将找到标准的Application_Start
方法。
我的问题如下,如何调用此函数?因为它不是覆盖。所以我的猜测是这个方法名称是按照惯例。 Application_Error
方法也是如此。
我想知道这些方法的钩子在哪里。因为我编写这些方法(不覆盖它们),我在MSDN中找不到任何关于它们的文档。 (我找到了this页面,但它只是告诉您挂钩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
}
答案 0 :(得分:15)
它并不是真正神奇的...... ASP.NET管道将所有这些都连接起来。
你可以see the documentation regarding this here。
具体来说,您将对以下部分感兴趣:
为请求分配了
HttpApplication
个对象。
由触发的事件列表和按什么顺序组成。
该页面上有链接(此处包含的内容太多),链接到包含更多信息的各种其他页面。
ASP.NET自动将应用程序事件绑定到处理程序中 Global.asax文件使用命名约定Application_event等 为
Application_BeginRequest
。这类似于ASP.NET的方式 页面方法自动绑定到事件,例如页面Page_Load
事件。
答案 1 :(得分:2)
为了揭开已接受答案的“魔力”的神秘面纱,ASP.Net管道将[Route("{orderId:guid}/order-lines/{orderlineId:guid}")]
[HttpDelete]
public async Task<IActionResult> DeleteOrderLine(Guid orderId, Guid orderLineId)
{
var request = new DeleteOrderLineRequest(orderLineId);
var response = await _mediator.Send(request);
var orderLineModel = _mapper.Map<OrderLineDto, OrderLineModel>(response.OrderLine);
return Ok(orderLineModel);
}
事件自动绑定到类中HttpApplication
的方法。如果(很像我)你宁愿看到明确绑定到处理程序的事件,可以通过覆盖Application_EventName
绑定它们,Visual Studio将生成具有正确签名的处理程序方法。
HttpApplication.Init()
答案 2 :(得分:1)
ASP.Net本身创建它。以下是根据MSDN的流程 -
Here is the reference - ASP.Net Application Life Cycle.
从引用 - ASP.NET使用命名约定Application_event(例如Application_BeginRequest)自动将应用程序事件绑定到Global.asax文件中的处理程序。