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
интерфейс.