我正在尝试在 ASP.NET WebAPI 项目中记录整个传入请求和传出响应。虽然我同意DelegatingHandler
,但我的雇主坚持使用HttpModule
. 你会如何向她解释,为什么我们应该使用DelegatingHandler
而不是HttpModule
?还是我错了?
1 回答
我会使用DelegatingHandler。DelegatingHandler是 Web API 管道的一部分,可以在任何主机下运行。HttpModule 不是 Web Api 的一部分,需要 IIS。
尽管与您的问题没有直接关系,但我将引用以下MSDN文章,其中强调了两者的差异:
HTTP 模块这是在 IIS 上运行的 Web API 的一个选项。HTTP 模块允许安全代码作为 IIS 管道的一部分尽早执行。从 HTTP 模块建立的主体可用于所有组件,包括稍后在管道中运行的 IIS 组件。例如,当 HTTP 模块建立主体以响应 AuthenticateRequest 事件时,主体的用户名会正确记录在 IIS 日志的 cs-username 字段中。HTTP 模块的最大缺点是缺乏粒度。HTTP 模块针对进入应用程序的所有请求运行。对于具有不同功能(例如 HTML 标记生成、Web API 等)的 Web 应用程序,使用 HTTP 模块以一种方式强制执行身份验证通常不是一种足够灵活的方法。
消息处理程序 由 ASP.NET Web API 提供的可扩展性选项,使用消息处理程序以确保安全的最大好处是它是 ASP.NET Web API 框架的概念,因此不依赖于底层主机或服务器。此外,消息处理程序仅针对 Web API 请求运行。使用消息处理程序的缺点是缺乏更精细的控制。消息处理程序可以配置为作为所有请求或特定路由的全局处理程序运行。对于给定的路由,您可以有多个控制器。所有这些控制器及其包含的操作方法必须共享为该路由配置的消息处理程序强制执行的相同身份验证。换句话说,消息处理程序实现的身份验证的最低粒度是在路由级别。