0

Я пытаюсь зарегистрировать все входящие запросы и исходящие ответы в проекте ASP.NET WebAPI. В то время как я согласен с DelegatingHandler, мой работодатель настаивает на использовании HttpModule. Как бы вы ей объяснили, почему мы должны использовать DelegatingHandler, а не HttpModule? Или я ошибаюсь?HttpModule против DelegatingHandler - преимущества/недостатки?

ответ

3

Я бы использовал DelegatingHandler. DelegatingHandler является частью конвейера веб-API и может работать под любым хостом. HttpModule не является частью Web Api и требует IIS.

Хотя не связаны напрямую на ваш вопрос, я буду цитировать из следующего MSDN статьи, которая выделяет два включая различия:

HTTP Module Это вариант для веб-интерфейсов, работающих на IIS , Модули HTTP позволяют выполнять защитный код на ранней стадии в рамках конвейера IIS . Принцип, созданный с помощью модуля HTTP, доступен всем компонентам, включая компоненты IIS, работающие позже в конвейере . Например, когда принципал устанавливается модулем HTTP в ответ на событие AuthenticateRequest, имя пользователя , как правило, регистрируется правильно в поле cs-username в журналах IIS . Самый большой недостаток с модулями HTTP - отсутствие степени детализации . HTTP-модули запускаются для всех запросов, поступающих в приложение . Для веб-приложения с различными возможностями, например Генерация разметки HTML, веб-API и т. Д., Наличие HTTP-модуля , обеспечивающего аутентификацию одним способом, обычно не является достаточно гибким подход . Другим недостатком использования HTTP-модуля является зависимость от хоста-IIS.

Message Handler Опцион расширяемости обеспечивается ASP.NET Web API, наибольшая выгода в использовании обработчика сообщений для безопасности является это концепция структуры ASP.NET Web API и, следовательно, не зависят от основного хоста или сервера. Кроме того, обработчик сообщений работает только для запросов Web API. Недостатком использования обработчика сообщений является недостаток более тонкого управления. Обработчик сообщений может быть настроен для выполнения в качестве глобального обработчика для всех запросов или для определенного маршрута. Для данного маршрута вы можете иметь несколько контроллеров. Все эти контроллеры и методы действия, которые они содержат, должны совместно использовать одну и ту же аутентификацию , введенную в действие обработчиком сообщений, настроенным для этого маршрута. В других словах наименьшая степень детализации для аутентификации, выполняемая обработчиком сообщений , находится на уровне маршрута.