Подтвердить что ты не робот

Магические функции Global.asax

При создании проекта ASP.NET Mvc в Visual Studio создаются 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
}
4b9b3361

Ответ 1

На самом деле это не волшебство. ASP.NET Pipeline прокладывает все это.

Вы можете посмотреть документацию, касающуюся этого здесь.

В частности, вас будут интересовать следующие детали:

Объекту HttpApplication присваивается запрос.

Состоит из списка событий, которые запускаются и в каком порядке.

На этой странице есть ссылки (слишком много, чтобы содержать здесь), которые ссылаются на другие страницы с еще большей информацией.


ASP.NET автоматически связывает события приложения с обработчиками в Файл Global.asax с использованием соглашения об именах Application_event, такого как Application_BeginRequest. Это похоже на то, как ASP.NET методы страницы автоматически привязаны к событиям, таким как страница Page_Load событие.

Источник: http://msdn.microsoft.com/en-us/library/ms178473.aspx

Ответ 2

сам ASP.Net создает. Вот поток по MSDN -

  • Пользователь запрашивает ресурс приложения с веб-сервера.
  • ASP.NET получает первый запрос для приложения.
  • Основные объекты ASP.NET создаются для каждого запроса.
  • Объекту HttpApplication присваивается запрос. На этом этапе Global.asax будет обработан, и события будут связаны автоматически.
  • Запрос обрабатывается конвейером HttpApplication. На этом этапе возникают события HttpApplication Global.

Вот ссылка - жизненный цикл приложения ASP.Net.

Из ссылки - ASP.NET автоматически связывает события приложения с обработчиками в файле Global.asax, используя соглашение о присвоении имен Application_event, такое как Application_BeginRequest.

Ответ 3

Чтобы демистифицировать "магию" принятого ответа, конвейер 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)
{
  ...
}

Существует пример этого метода привязки событий