ASP.NET модулей HTTP и обработчиков HTTP

В этой статье представлены модули и обработчики HTTP ASP.NET.

Исходная версия продукта: ASP.NET
Исходный номер базы знаний: 307985

Сводка

Модули HTTP и обработчики HTTP являются неотъемлемой частью архитектуры ASP.NET. Во время обработки запроса каждый запрос обрабатывается несколькими модулями HTTP (например, модулем проверки подлинности и модулем сеанса), а затем обрабатывается одним обработчиком HTTP. После обработки запроса обработчиком запрос выполняется обратно через http-модули.

Общие сведения о модулях HTTP

Модули вызываются до и после выполнения обработчика. Модули позволяют разработчикам перехватывать, участвовать в каждом отдельном запросе или изменять их. Модули реализуют IHttpModule интерфейс, расположенный System.Web в пространстве имен.

Доступные события, с которыми могут синхронизироваться модули HTTP

Класс HttpApplication предоставляет ряд событий, с которыми модули могут синхронизироваться. Для модулей, с которыми можно синхронизироваться при каждом запросе, доступны следующие события. Эти события перечислены в последовательном порядке:

  • BeginRequest: запрос запущен. Если вам нужно что-то сделать в начале запроса (например, отображать рекламные баннеры в верхней части каждой страницы), синхронизируйте это событие.

  • AuthenticateRequest: если вы хотите подключить собственную настраиваемую схему проверки подлинности (например, найти пользователя в базе данных для проверки пароля), создайте модуль, который синхронизирует это событие и выполняет проверку подлинности пользователя по своему усмотрению.

  • AuthorizeRequest: это событие используется внутри организации для реализации механизмов авторизации (например, для хранения списков управления доступом (ACL) в базе данных, а не в файловой системе. Хотя это событие можно переопределить, причин для этого не так много.

  • ResolveRequestCache: это событие определяет, можно ли обслуживать страницу из кэша вывода. Если вы хотите написать собственный модуль кэширования (например, создать файловый кэш, а не кэш памяти), синхронизируйте это событие, чтобы определить, следует ли обслуживать страницу из кэша.

  • AcquireRequestState: состояние сеанса извлекается из хранилища состояний. Если вы хотите создать собственный модуль управления состоянием, синхронизируйте это событие, чтобы получить состояние сеанса из хранилища состояний.

  • PreRequestHandlerExecute: это событие возникает перед выполнением обработчика HTTP.

  • PostRequestHandlerExecute: это событие возникает после выполнения обработчика HTTP.

  • ReleaseRequestState: состояние сеанса сохраняется в хранилище состояний. При создании пользовательского модуля состояния сеанса необходимо сохранить состояние обратно в хранилище состояний.

  • UpdateRequestCache: это событие записывает выходные данные обратно в кэш вывода. При создании пользовательского модуля кэша выходные данные записываются обратно в кэш.

  • EndRequest: запрос завершен. Может потребоваться создать модуль отладки, который собирает сведения на протяжении всего запроса, а затем записывает их на страницу.

Следующие события доступны для модулей для синхронизации с каждой передачей запросов. Порядок этих событий не детерминирован.

  • PreSendRequestHeaders: это событие возникает перед отправкой заголовков. Если вы хотите добавить дополнительные заголовки, можно синхронизировать это событие из пользовательского модуля.

  • PreSendRequestContent: это событие возникает при вызове Response.Flush метода . Если вы хотите добавить дополнительное содержимое, можно синхронизировать это событие из пользовательского модуля.

  • Error: это событие возникает при возникновении необработанного исключения. Если вы хотите написать пользовательский модуль обработчика ошибок, синхронизируйте это событие.

Настройка модулей HTTP

Обработчик <httpModules> раздела конфигурации отвечает за настройку модулей HTTP в приложении. Его можно объявить на уровне компьютера, сайта или приложения. Используйте следующий синтаксис для обработчика <httpModules> разделов:

<httpModules>
    <add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <clear />
</httpModules>

Создание модулей HTTP

Чтобы создать http-модуль, необходимо реализовать IHttpModule интерфейс . Интерфейс IHttpModule имеет два метода со следующими сигнатурами:

void Init(HttpApplication);
void Dispose();

Общие сведения о обработчиках HTTP

Обработчики используются для обработки запросов отдельных конечных точек. Обработчики позволяют платформе ASP.NET обрабатывать отдельные URL-адреса HTTP или группы расширений URL-адресов в приложении. В отличие от модулей, для обработки запроса используется только один обработчик. Все обработчики IHttpHandler реализуют интерфейс, расположенный System.Web namespaceв . Обработчики аналогичны расширениям ISAPI.

Настройка обработчиков HTTP

Обработчик <httpHandlers> раздела конфигурации отвечает за сопоставление входящих URL-адресов с классом IHttpHandler или IHttpHandlerFactory . Его можно объявить на уровне компьютера, сайта или приложения. Подкаталоги наследуют эти параметры.

Администраторы используют директиву <add> tag для настройки <httpHandlers> раздела. <Add> директивы интерпретируются и обрабатываются в последовательном порядке сверху вниз. Используйте следующий синтаксис для обработчика <httpHandler> разделов:

<httpHandlers>
    <add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
    <remove verb="[verb list]" path="[path/wildcard]" />
    <clear />
</httpHandlers>

Создание обработчиков HTTP

Чтобы создать обработчик HTTP, необходимо реализовать IHttpHandler интерфейс . Интерфейс IHttpHandler имеет один метод и одно свойство со следующими сигнатурами:

void ProcessRequest(HttpContext);
bool IsReusable {get;}

Примечание.

Если в обработчике HTTP требуется состояние сеанса IRequiresSessionState , необходимо также реализовать интерфейс .