Конфигурирование и настройка Microsoft ASP.NET

       

Создание собственного модуля HTTP


Вы можете создать модуль для выполнения любых действий, начиная со сжатия ответа HTTP и заканчивая аутентификацией запроса HTTP. В этом примере вы создадите простой модуль, который добавляет в конец каждого запроса уведомление об авторских правах компании.

Сначала создается базовая структура класса. Давайте посмотрим на нее.

C#

using System; using System.Web; using System.Collections;

public class CopyrightModule : IHttpModule { public void Init(HttpApplication application) { }

public void Dispose() { } }

VB.NET

Imports System Imports System.Web Imports System.Collections

Public Class CopyrightModule Implements IHttpModule

Public Sub Init(ByVal application as HttpApplication) _ Implements IHttpModule.Init

End Sub

Public Sub Dispose() Implements IHttpModule.Dispose End Sub

End Class

Это основа класса. Сначала класс реализует интерфейс IHttpModule, требующий методы Init и Dispose. Метод Init позволяет передать события HTTP в собственные обработчики событий. Метод Dispose позволяет удалять все соединения и ресурсы перед закрытием модуля. Возможно передать в метод Init несколько событий, каждое из которых возникает на различных стадиях процесса обработки запроса HTTP. В таблице 4.12 приведен перечень всех событий, которые можно связать с вашим HTTP-модулем.

Таблица 4.12. События HTTP приложения

СобытиеОписание
AсquireRequestStateВозникает, когда ASP.NET получает текущее состояние текущего запроса. Используйте событие при изменении состояния запроса.
AuthenticateRequestВозникает, когда ASP.NET устанавливает личность пользователя, сгенерировавшего запрос.
AuthorizeRequestВозникает, когда ASP.NET проводит авторизацию пользователя.
BeginRequestВозникает, когда ASP.NET запускает процесс обработки запроса. Это первое доступное вам событие данного процесса.
DisposedВозникает, когда приложение HTTP удаляется.
EndRequestЭто последнее событие в процессе обработки запроса в ASP.NET.
ErrorВозникает, когда приложение выбрасывает необработанное исключение.
PostRequestHandlerExecuteВозникает, когда завершается выполнение обработчика HTTP ASP.NET.
PreRequestHandlerExecuteВозникает непосредственно перед тем, как ASP.NET передаст запрос в обработчик HTTP.
PreSendRequestContentВозникает непосредственно перед тем, как ASP.NET отправит содержимое ответа пользователю.
PreSendRequestHeadersВозникает непосредственно перед тем, как ASP.NET отправит пользователю заголовки HTTP.
ReleaseRequestStateВозникает после того, как ASP.NET закончит выполнение всех обработчиков запросов. Оно запускает модули состояния, записывающие текущее состояние данных.
ResolveRequestCacheВозникает, когда ASP.NET завершает процесс авторизации. Затем оно запускает все имеющиеся модули кэширования для передачи кэшированных страниц вместо передачи запроса в обработчик.
UpdateRequestCacheВозникает, когда ASP.NET завершает выполнение обработчика HTTP. Затем оно запускает все имеющиеся модули кэширования для кэширования ответа для будущих запросов.
<
Все эти события доступны для собственных модулей HTTP. Давайте посмотрим, как добавлять события в собственный модуль HTTP. Первым шагом является передача события в метод Init.

C#

public void Init(HttpApplication application) { application.EndRequest += (new EventHandler(this.Application_EndRequest)); }

VB.NET

Public Sub Init(ByVal application as HttpApplication) Implements _ IHttpModule.Init AddHandler application.EndRequest, _ AddressOf Me.Application_EndRequest End Sub

Когда модуль инициализирован, событие EndRequest объекта Application передается в метод Application_EndRequest. Когда готов к отправке ответ, вызывается метод Application_EndRequest, модифицирующий ответ. Ниже приведен код, в котором данный метод модифицирует запрос.

C#

private void Application_EndRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication) source; HttpContext context = application.context; context.Response.Write("Copyright James Avery 2003"); }

VB.NET

Private Sub Application_EndRequest(ByVal [source] As [Object], _ ByVal e As EventArgs) Dim application as HttpApplication = CType([source], _ HttpApplication) Dim context As HttpContext = application.Context context.Response.Write _ ("Copyright James Avery 2003</body></html>") End Sub


Содержание раздела