Поделиться через


ASP.NET модулях HTTP и обработчиках HTTP

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

Исходная версия продукта: 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-адреса или группы расширений URL-адресов в приложении. В отличие от модулей, для обработки запроса используется только один обработчик. Все обработчики реализуют IHttpHandler интерфейс, расположенный в .System.Web namespace Обработчики аналогичны расширениям интерфейса программирования приложений Internet Server (ISAPI).

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

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

Администраторы используют директиву <add> тега для настройки <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 интерфейс.