Файлы Global.asax, иногда называемые файлами приложений ASP.NET, предоставляют центральное расположение для реагирования на события уровня приложения или модуля. Вы можете использовать этот файл для реализации безопасности приложений и других задач.
Файл Global.asax настроен таким образом, что любой прямой HTTP-запрос (через URL-адрес) автоматически отклоняется, поэтому пользователи не могут загружать или просматривать его содержимое. Платформа страниц ASP.NET автоматически распознает любые изменения, внесенные в файл Global.asax. Платформа страниц ASP.NET перезапускает приложение после изменения Global.asax, что включает закрытие всех сеансов браузера, удаление всей информации о состоянии и перезапуск домена приложения.
Файл Global.asax наследует класс HttpApplication, который поддерживает пул объектов HttpApplication и при необходимости распределяет объекты в пуле приложениям. Файл Global.asax содержит следующие события:
· Application_Init: это событие запускается, когда приложение создается или вызывается в первый раз. Он будет вызываться для всех экземпляров объекта HttpApplication.
· Application_Dispose: срабатывает перед уничтожением приложения. Это идеальное место для очистки ранее использованных ресурсов.
· Application_Error: это событие инициируется, когда в приложении встречается необработанное исключение.
· Application_Start: это событие запускается при создании первого экземпляра класса HttpApplication. Он позволяет создавать объекты, к которым могут получить доступ все экземпляры HttpApplication.
· Application_End: это событие срабатывает, когда уничтожается последний экземпляр класса HttpApplication. Он запускается только один раз за время существования приложения.
· Application_BeginRequest: срабатывает при получении запроса приложения. Для запроса это первое событие, которое инициируется. Запрос обычно представляет собой запрос страницы (URL), введенный пользователем.
· Application_EndRequest: последнее событие, запрошенное приложением.
· Application_PreRequestHandlerExecute: это событие инициируется до того, как платформа страниц ASP.NET начинает выполнять обработчик событий, например страницу или веб-службу.
· Application_PostRequestHandlerExecute: это событие срабатывает, когда платформа страниц ASP.NET завершает выполнение обработчика событий.
· Applcation_PreSendRequestHeaders: это событие срабатывает, когда платформа страниц ASP.NET отправляет заголовки HTTP запрашивающему клиенту (браузеру).
· Application_PreSendContent: это событие инициируется, когда платформа страниц ASP.NET отправляет содержимое запрашивающему клиенту (браузеру).
· Application_AcquireRequestState: это событие срабатывает, когда платформа страниц ASP.NET получает текущее состояние (состояние сеанса), связанное с текущим запросом.
· Application_ReleaseRequestState: это событие инициируется, когда платформа страниц ASP.NET завершает выполнение всех обработчиков событий. Это приведет к тому, что все модули состояния сохранят данные своего текущего состояния.
· Application_ResolveRequestCache: это событие срабатывает, когда платформа страниц ASP.NET завершает запрос на авторизацию. Это позволяет модулю кэша обслуживать запросы из кэша, тем самым минуя выполнение обработчиков событий.
· Application_UpdateRequestCache: это событие инициируется, когда платформа страниц ASP.NET завершает выполнение обработчика событий, позволяя модулю кэша сохранять данные ответа для использования при ответе на последующие запросы.
· Application_AuthenticateRequest: это событие инициируется, когда модуль безопасности устанавливает действительный идентификатор для текущего пользователя. В это время учетные данные пользователя будут проверены.
· Application_AuthorizeRequest: это событие инициируется, когда модуль безопасности подтверждает, что пользователь может получить доступ к ресурсу.
· Session_Start: это событие инициируется, когда новый пользователь получает доступ к веб-сайту приложения.
· Session_End: это событие инициируется, когда истекает время сеанса пользователя, завершается или когда он покидает веб-сайт приложения.
Ключевой проблемой при использовании этих событий является знание порядка, в котором они запускаются. События Application_Init и Application_Start запускаются один раз при первом запуске приложения. Аналогично, события Application_Dispose и Application_End запускаются один раз при завершении работы приложения. Кроме того, события на основе сеанса (Session_Start и Session_End) используются только тогда, когда пользователи входят на сайт и покидают его. Остальные события обрабатывают запросы приложения. Порядок, в котором эти события запускаются, следующий:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
·
Application_ResolveRequestCache ·
Application_AcquireRequestState ·
Application_PreRequestHandlerExecute · Application_PreSendRequestHeaders
· Application_PreSendRequestContent
· <<Код выполнения>>
· Application_PostRequestHandlerExecute
·
Application_ReleaseRe. questState · Application_UpdateRequestCache
· Application_EndRequest
эти события Часто используется в целях безопасности. В следующем примере C# показаны различные события Global.asax с использованием события Application_Authenticate для выполнения проверки подлинности на основе форм с помощью файлов cookie. Кроме того, событие Application_Start заполняет переменную приложения, а событие Session_Start заполняет переменную сеанса. Событие Application_Error отображает простое сообщение с описанием произошедшей ошибки.
protected void Application_Start (отправитель объекта, EventArgs e) {
Приложение["Название"] = "Образец Builder.com";
}
protected void Session_Start (отправитель объекта, EventArgs e) {
Сеанс["startValue"] = 0;
}
protected void Application_AuthenticateRequest (отправитель объекта, EventArgs e) {
//Извлекаем файл cookie аутентификации с помощью форм
строка cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
если (нуль == authCookie) {
// Файл cookie аутентификации отсутствует.
возвращаться;
}
FormsAuthenticationTicket authTicket = null;
пытаться {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} catch(Исключение ex) {
// Подробности журнала исключений (опущено для простоты)
возвращаться;
}
если (нуль == authTicket) {
// Файл cookie не удалось расшифровать.
возвращаться;
}
// При создании билета было присвоено свойство UserData
// строка имен ролей, разделенная вертикальной чертой.
строка[2] роли
роли[0] = "Один"
роли[1] = "Два"
// Создаем объект Identity
Идентификатор FormsIdentity = новый FormsIdentity (authTicket);
// Этот принципал будет действовать на протяжении всего запроса.
Принципал GenericPrincipal = новый GenericPrincipal (id, роли);
// Прикрепляем новый основной объект к текущему объекту HttpContext
Context.User = руководитель;
}
protected void Application_Error (отправитель объекта, EventArgs e) {
Response.Write("Обнаружена ошибка.");
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475565.html