HTTP-обработчик против HTTP-модуля - PullRequest
136 голосов
/ 23 июня 2011

Может ли кто-то объяснить менее чем в двух предложениях разницу между обоими? Да, я знаю, что Google может дать сотни ответов, но не одно из двух ясных предложений:)

Ответы [ 7 ]

295 голосов
/ 23 июня 2011

HttpHandler - то, куда направляется поезд запроса.HttpModule - это станция на своем пути.

195 голосов
/ 23 июня 2011

Два предложения:

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

HttpHandler обычно связан с определенным расширением и используется для таких вещей, как RSS-каналы, динамическое создание или модификация изображений и т. П.

Еще немного объяснений, если это не совсем понятно:

То, как я о них думаю - модули «подключаются» к конвейеру запросов, тогда как обработчики «обрабатывают» определенное расширение файла. Итак, если у вас есть сайт с LoggingModule и PdfHandler, оба будут выполняться для запроса к http://example.com/sample.pdf,, а один только модуль регистрации будет выполняться для запроса к http://example.com/page.aspx.

Существует довольно четкая статья о разнице в MSDN: Обзор обработчиков HTTP и модулей HTTP

20 голосов
/ 13 апреля 2016

Основная и общая цель HttpHandler и HttpModule - внедрить логику предварительной обработки до того, как запрос ASP.NET достигнет IIS-сервера.

ASP.NET предоставляет два способа внедрения логики в конвейер запросов;

  1. Обработчики Http: Http Handler помогает нам вводить логику предварительной обработки на основе расширения запрошенного имени файла. ASP.NET использует обработчики HTTP для реализации многих своих собственных функций. Например, ASP.NET использует обработчики для обработки файлов .aspx, .asmx и trace.axd.

пример: RSS-каналы. Чтобы создать RSS-канал для веб-сайта, вы можете создать обработчик, который генерирует XML-формат в формате RSS. Поэтому, когда пользователи отправляют запрос на ваш сайт, который заканчивается на .rss, ASP.NET вызывает ваш обработчик для обработки запроса.

В создании обработчика есть три шага 1. Реализовать интерфейс IHttpHandler. 2. Зарегистрируйте обработчик в файле web.config или machine.config. 3. Сопоставьте расширение файла (* .arshad) с aspnet_isapi.dll в IIS.

Интерфейс IHttpHandler имеет метод ProcessRequest и свойство IsReusable, которое необходимо реализовать. ProcessRequest: в этом методе вы пишете код, который создает выходные данные для обработчика. IsResuable: это свойство указывает, можно ли повторно использовать этот обработчик.

Вы можете зарегистрировать обработчик в файле web.config следующим образом

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

Примечание: здесь мы обрабатываем любое имя файла с расширением arshad.

  1. Http Модули: HttpModule - это процессор на основе событий, который вводит логику предварительной обработки до того, как запрос достигает IIS-сервера. ASP.NET использует HTTP-модуль для реализации множества собственных функций, таких как аутентификация и авторизация, управление сеансами, кэширование вывода и т. Д.

Движок ASP.NET генерирует множество событий, когда запрос проходит через конвейер запросов. Некоторые из этих событий: AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Используя HttpModule, вы можете написать логику в этих событиях. Эта логика выполняется при возникновении событий и до того, как запрос достигает IIS.

В создании модулей участвуют два этапа: 1. Реализовать интерфейс IHttpModule 2. Зарегистрируйте модуль в файле web.config или machine.config

Пример: Безопасность: с помощью модуля HTTP вы можете выполнить пользовательскую проверку подлинности или другие проверки безопасности, прежде чем запрос достигнет IIS.

19 голосов
/ 27 июня 2011

HTTP-обработчик - это процесс, который запускается в ответ на запрос к веб-приложению ASP.NET.Модули HTTP позволяют проверять входящие и исходящие запросы и выполнять действия на основе запроса.

4 голосов
/ 19 января 2016

HttpHandler отвечает за обработку http-запроса по расширению, в то время как HttpModule отвечает на события жизненного цикла приложения.

2 голосов
/ 19 июня 2015

Хорошая статья об этом HttpModule-and-HttpHandlers

Справка: INFO: Обзор ASP.NET HTTP-модулей и обработчиков HTTP

«Модули вызываются до и послеобработчик выполняется.Модули позволяют разработчикам перехватывать, участвовать или изменять каждый отдельный запрос.Обработчики используются для обработки отдельных запросов конечных точек.Обработчики позволяют ASP.NET Framework обрабатывать отдельные URL-адреса HTTP или группы расширений URL-адресов в приложении.В отличие от модулей, для обработки запроса используется только один обработчик ».

1 голос
/ 26 декабря 2013

Обработчик HTTP - это то, где фактически выполняется компиляция на основе настроек. например, если расширение страницы - .aspx, то оно будет скомпилировано через system.web.Ui.Pagahandlefactory. как только компиляция будет выполнена по запросу дескриптора HTTP, будет выполнен модуль HTTP и IIS.

...