пятница, 22 апреля 2011, 07:25 | Комментарии: 1 В этой небольшой памятке перечислены события, который можно перехватить используя методы, определяемые в файле global.asax.
Список событий в порядке из вызова
Чтобы не было путаницы в дальнейшем, определим чем аутентификация отличается от авторизации:
- Аутентификация – идентификация личности пользователя (например по его имени и пароль).
- Авторизация – определение прав на запрашиваемый пользователем ресурс (страницу, сервис).
Теперь рассмотрим вариант списка событий без их описания. При этом расположим их в порядке, соответствующем последовательности вызова.
03 | protected void Application_Start(Object sender, EventArgs e); |
07 | protected void Application_BeginRequest(Object sender, EventArgs e); |
08 | protected void Application_AuthenticateRequest(Object sender, EventArgs e); |
09 | protected void Application_AuthorizeRequest(Object sender, EventArgs e); |
10 | protected void Application_ResolveRequestCache(Object sender, EventArgs e); |
14 | protected void Session_Start(Object sender, EventArgs e); |
18 | protected void Application_AcquireRequestState(Object sender, EventArgs e); |
19 | protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e); |
20 | protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e); |
21 | protected void Application_ReleaseRequestState(Object sender, EventArgs e); |
22 | protected void Application_UpdateRequestCache(Object sender, EventArgs e); |
23 | protected void Application_EndRequest(Object sender, EventArgs e); |
29 | protected void Application_PreSendRequestHeaders(Object sender, EventArgs e); |
30 | protected void Application_PreSendRequestContent(Object sender, EventArgs e); |
34 | protected void Session_End(Object sender, EventArgs e); |
38 | protected void Application_Disposed(Object sender, EventArgs e); |
39 | protected void Application_End(Object sender, EventArgs e); |
А теперь рассмотрим все эти события более подробно:
- protected void Application_Start(Object sender, EventArgs e);
Вызывается единожды при создании экземпляра класса
HttpApplication в момент обращения первого пользователя к нему. Позволяет создать глобальные объекты, доступные во всем приложении.
- protected void Application_BeginRequest(Object sender, EventArgs e);
Вызывается первым каждый раз при получения нового запроса от пользователя.
- protected void Application_AuthenticateRequest(Object sender, EventArgs e);
Вызывается после аутентификации пользователя (установления его виртуальной личности, включая статус "незарегистрированный пользователь"). Данный метод можно использовать для проведения дополнительных проверок его статуса.
- protected void Application_AuthorizeRequest(Object sender, EventArgs e);
Вызывается после авторизации пользователя по отношению к запрашиваемому ресурсу. Т.е. указывает что у пользователя есть права на действие (как правило просмотр), которое он хочет выполнить. Также как и
Application_AuthenticateRequest() можно использовать для дополнительных проверок.
- protected void Application_ResolveRequestCache(Object sender, EventArgs e);
Вызывается при поиске в кэше готового результата для запроса. Позволяет модулям вернуть уже готовый ранее результат и не задействовать обработчики. Таким образом снижается нагрузка на сервер, на котором размещено веб-приложение.
- protected void Session_Start(Object sender, EventArgs e);
Вызывается единожды для каждого клиента (посетителя) в начале его сессии.
- protected void Application_AcquireRequestState(Object sender, EventArgs e);
Вызывается после того, как ядро ASP.NET получает текущий контекст (state) запроса (данные сессии).
- protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e);
Вызывается перед обращением к обработчикам запроса (handlers).
- protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e);
Вызывается после завершения работы обработчиков запроса (handlers).
- protected void Application_ReleaseRequestState(Object sender, EventArgs e);
Вызывается после завершения всех обработчиков событий и сохранения контекста (state) запроса.
- protected void Application_UpdateRequestCache(Object sender, EventArgs e);
Вызывается после завершения всех обработчиков событий. В данном методе модули имеют возможность сохранить необходимые данные в кэше. В дальнейшем они могут быть использованы при обработке
Application_ResolveRequestCache().
- protected void Application_EndRequest(Object sender, EventArgs e);
Вызывается как последнее событие при завершении обработки запроса от пользователя.
- protected void Application_PreSendRequestHeaders(Object sender, EventArgs e);
Вызывается перед отправкой заголовков ответа клиенту.
- protected void Application_PreSendRequestContent(Object sender, EventArgs e);
Вызывается перед отправкой содержимого ответа (например HTML кода страницы) клиенту.
- protected void Session_End(Object sender, EventArgs e);
Вызывается единожды для каждого клиента (посетителя) при завершении его сессии (закрытии или истечении времени таймаута).
- protected void Application_Disposed(Object sender, EventArgs e);
Вызывается при завершении веб-приложения. Хорошо подходит для методов освобождения используемых ресурсов.
- protected void Application_End(Object sender, EventArgs e);
Вызывается при уничтожении последнего экземпляр класса
HttpApplication. Т.е. при истечении таймаута у последнего активного пользователя.
- protected void Application_Error(Object sender, EventArgs e);
В данный метод передаются все необработанные исключения, возникшие в веб-приложении. Как правило используется для записи информации о них в журнал и уведомлений обслуживающего персонала.
Пример файла Global.asax со всеми перечисленными обработчиками
Приведенный ниже код может быть добавлен в ASP.NET или ASP.NET MVC приложение. В каждом приведенном методе используется вызов
Debug.Write() из пространства имен
System.Diagnostics для вывода уведомления в окно Output. Таком образом можно самостоятельно посмотреть на порядок вызова обработчиков событий (код взять из ASP.NET MVC приложения).
001 | namespace MvcApplication |
004 | using System.Diagnostics; |
005 | using System.Web.Mvc; |
006 | using System.Web.Routing; |
011 | public class MvcApplication : System.Web.HttpApplication |
013 | public static void RegisterGlobalFilters(GlobalFilterCollection filters) |
015 | filters.Add( new HandleErrorAttribute()); |
018 | public static void RegisterRoutes(RouteCollection routes) |
020 | routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" ); |
024 | "{controller}/{action}/{id}" , |
026 | controller = "UserProfiles" , |
028 | id = UrlParameter.Optional |
033 | protected void Application_Init(Object sender, EventArgs e) |
035 | Debug.WriteLine( "protected void Application_Init();" ); |
038 | protected void Application_Start() |
040 | AreaRegistration.RegisterAllAreas(); |
042 | RegisterGlobalFilters(GlobalFilters.Filters); |
043 | RegisterRoutes(RouteTable.Routes); |
045 | Debug.WriteLine( "protected void Application_Start();" ); |
048 | protected void Application_End(Object sender, EventArgs e) |
050 | Debug.WriteLine( "protected void Application_End();" ); |
053 | protected void Application_Disposed(Object sender, EventArgs e) |
055 | Debug.WriteLine( "protected void Application_Disposed();" ); |
058 | protected void Application_BeginRequest(Object sender, EventArgs e) |
060 | Debug.WriteLine( "protected void Application_BeginRequest();" ); |
063 | protected void Application_EndRequest(Object sender, EventArgs e) |
065 | Debug.WriteLine( "protected void Application_EndRequest();" ); |
068 | protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) |
070 | Debug.WriteLine( "protected void Application_PreRequestHandlerExecute();" ); |
073 | protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e) |
075 | Debug.WriteLine( "protected void Application_PostRequestHandlerExecute();" ); |
078 | protected void Application_PreSendRequestHeaders(Object sender, EventArgs e) |
080 | Debug.WriteLine( "protected void Application_PreSendRequestHeaders();" ); |
083 | protected void Application_PreSendRequestContent(Object sender, EventArgs e) |
085 | Debug.WriteLine( "protected void Application_PreSendRequestContent();" ); |
088 | protected void Application_AcquireRequestState(Object sender, EventArgs e) |
090 | Debug.WriteLine( "protected void Application_AcquireRequestState();" ); |
093 | protected void Application_ReleaseRequestState(Object sender, EventArgs e) |
095 | Debug.WriteLine( "protected void Application_ReleaseRequestState();" ); |
098 | protected void Application_ResolveRequestCache(Object sender, EventArgs e) |
100 | Debug.WriteLine( "protected void Application_ResolveRequestCache();" ); |
103 | protected void Application_UpdateRequestCache(Object sender, EventArgs e) |
105 | Debug.WriteLine( "protected void Application_UpdateRequestCache();" ); |
108 | protected void Application_AuthenticateRequest(Object sender, EventArgs e) |
110 | Debug.WriteLine( "protected void Application_AuthenticateRequest();" ); |
113 | protected void Application_AuthorizeRequest(Object sender, EventArgs e) |
115 | Debug.WriteLine( "protected void Application_AuthorizeRequest();" ); |
118 | protected void Session_Start(Object sender, EventArgs e) |
120 | Debug.WriteLine( "protected void Session_Start();" ); |
123 | protected void Session_End(Object sender, EventArgs e) |
125 | Debug.WriteLine( "protected void Session_End();" ); |