Ответ 1
HttpHandler - это то, куда направляется поезд запроса. HttpModule - это станция на этом пути.
Может кто-нибудь объяснить менее чем в 2 предложениях разницу между обоими? Да, я знаю, что Google может предоставить сотни ответов, но не один из двух явных предложений:)
HttpHandler - это то, куда направляется поезд запроса. HttpModule - это станция на этом пути.
Два предложения:
HttpModule будет выполняться для каждого запроса в вашем приложении независимо от расширения и обычно используется для таких вещей, как безопасность, статистика, ведение журнала и т.д.
HttpHandler обычно ассоциируется с определенным расширением и используется для таких вещей, как RSS-каналы, генерация или модификация динамического изображения и т.п.
Немного больше объяснений, если это не совсем понятно:
Я думаю о них - модули "подключаются" к конвейеру запроса, тогда как обработчики "обрабатывают" определенное расширение файла. Итак, если у вас есть сайт с LoggingModule и PdfHandler, оба будут выполняться для запроса http://example.com/sample.pdf, а модуль регистрации один будет выполняться для запроса http://example.com/page.aspx.
Там довольно четкая статья о различиях в MSDN: HTTP-обработчики и HTTP-модули Обзор
Обработчик HTTP - это процесс, который выполняется в ответ на запрос, сделанный в веб-приложении ASP.NET. HTTP-модули позволяют проверять входящие и исходящие запросы и предпринимать действия на основе запроса.
Основной и общей целью HttpHandler и HttpModule является введение логики предварительной обработки до того, как запрос ASP.NET достигнет сервера IIS.
ASP.NET предоставляет два способа ввода логики в конвейер запросов;
Пример: 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.
Механизм ASP.NET испускает множество событий в качестве прохода запроса через конвейер запроса. Некоторые из этих событий: AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Используя HttpModule, вы можете писать логику в этих событиях. Эта логика выполняется как огонь событий и до того, как запрос достигнет IIS.
В создании модулей есть два шага: 1. Внедрить интерфейс IHttpModule 2. Зарегистрируйте модуль в файле web.config или machine.config.
Пример: Безопасность. Используя HTTP-модуль, вы можете выполнить пользовательскую проверку подлинности или другие проверки безопасности до того, как запрос достигнет IIS.
Хорошая статья о нем HttpModule-and-HttpHandlers
Ссылка: INFO: HTTP-модули ASP.NET и обзор HTTP-обработчиков
"Модули вызываются до и после выполнения обработчика. Модули позволяют разработчикам перехватывать, участвовать или изменять каждый отдельный запрос. Обработчики используются для обработки отдельных запросов конечных точек. Обработчики позволяют ASP.NET Framework обрабатывать отдельные URL-адреса HTTP или групп URL-адресов внутри приложения. В отличие от модулей для обработки запроса используется только один обработчик.
Обработчик HTTP - это то, где собственно компиляция выполняется на основе настройки. например, если расширение страницы .aspx, то оно будет скомпилировано через system.web.Ui.Pagahandlefactory. после компиляции выполняется по запросу HTTP-запроса, будет идти через HTTP-модуль и IIS.
HttpHandler отвечает за обработку HTTP-запроса, в то время как HttpModule отвечает на события жизненного цикла приложения.