【问题标题】:HttpModule vs DelegatingHandler - advantages/disadvantages?HttpModule vs DelegatingHandler - 优点/缺点?
【发布时间】:2016-09-07 14:54:52
【问题描述】:
我正在尝试在 ASP.NET WebAPI 项目中记录整个传入请求和传出响应。虽然我同意DelegatingHandler,但我的雇主坚持使用HttpModule。你会如何向她解释,为什么我们应该使用DelegatingHandler 而不是HttpModule?还是我错了?
【问题讨论】:
标签:
c#
asp.net-web-api
asp.net-web-api2
httpmodule
delegatinghandler
【解决方案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 模块针对所有进入
应用。对于具有不同功能的 Web 应用程序,例如
HTML 标记生成、Web API 等,具有 HTTP 模块
以一种方式执行身份验证通常不够灵活
方法。使用 HTTP 模块的另一个缺点是
对主机的依赖——在本例中为 IIS。
Message Handler 由 ASP.NET Web API 提供的可扩展性选项,
使用消息处理程序确保安全的最大好处是它是
ASP.NET Web API 框架的概念,因此不依赖于
底层主机或服务器。此外,消息处理程序仅针对
Web API 请求。使用消息处理程序的缺点是缺乏
的精细控制。消息处理程序可以配置为作为
所有请求或特定路由的全局处理程序。对于给定的
路由,你可以有多个控制器。所有这些控制器和
它们包含的操作方法必须共享相同的身份验证
由为该路由配置的消息处理程序强制执行。其他
换句话说,由 a 实现的身份验证的最低粒度
消息处理程序处于路由级别。