Оба представляют методы-обработчики событий, которые служат одной и той же цели, с той разницей, что ASP.NET автоматически установил Application_BeginRequest
.
а другой Global_asax_BeginRequest
был явно зарегистрирован в вашем коде.
См. MSDN :
ASP.NET автоматически связывает события приложения с методами-обработчиками в файле Global.asax, используя соглашение об именах Application_event, такое как Application_BeginRequest и Application_Error.
На самом деле Application_BeginRequest
является сокращением для Sub Application_BeginRequest(sender As Object, e As EventArgs) Handles Me.BeginRequest
.
Ваш пользовательский обработчик событий Global_asax_BeginRequest
запускается первым, потому что во время компиляции подписка на событие, созданная с помощью ключевого слова Handles
, заканчивается в конструкторе класса Global_asax
, что дает ему возможность сначала зарегистрироваться на это событие, прежде чем Application_BeginRequest
можно зацепить.
Когда возникает событие BeginRequest
, порядок регистрации имеет значение и соблюдается.
Это становится понятным, если вы декомпилируете сборку сборки, например, с помощью. ILSply к C #, как показано на рисунке ниже. Обратите внимание на автоматически сгенерированную подписку на события в конструкторе.
Если вы хотите, чтобы ваш пользовательский обработчик событий запускался после Application_BeginRequest
, вы должны сделать ручную подписку в методе Init
через AddHandler
.
Приведенный ниже код показывает различные подписки на события для BeginRequest
и порядок выполнения.
Public Class Global_asax
Inherits HttpApplication
Public Overrides Sub Init()
AddHandler Me.BeginRequest, AddressOf handleBeginRequest
End Sub
Sub Application_BeginRequest(sender As Object, e As EventArgs)
'Runs second.
End Sub
Private Sub Global_asax_BeginRequest(sender As Object, e As EventArgs) Handles Me.BeginRequest
'Runs first.
End Sub
Private Sub handleBeginRequest(sender As Object, e As EventArgs)
'Runs third.
End Sub
End Class