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
, необходимо также реализовать интерфейс .