我正在尝试在ASP.NET WebAPI项目中记录整个传入请求和传出响应。虽然我同意HttpModule
,但我的雇主坚持使用DelegatingHandler
。您如何向她解释为什么我们应该使用HttpModule
而不是print([[i+j for i in "abc"] for j in "def"])
?或者我错了吗?
答案 0 :(得分:6)
我会使用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应用程序,例如 具有HTTP模块的HTML标记生成,Web API等 以一种方式强制执行身份验证通常不够灵活 做法。使用HTTP模块的另一个缺点是 在这种情况下,依赖于主机-IIS。
消息处理程序 ASP.NET Web API提供的可扩展性选项, 使用消息处理程序获得安全性的最大好处是它是一个 ASP.NET Web API框架的概念,因此不依赖于 底层主机或服务器。此外,消息处理程序仅运行 Web API请求。使用消息处理程序的缺点是缺乏 更好的控制。可以将消息处理程序配置为以a身份运行 所有请求或特定路由的全局处理程序。对于给定的 路由,你可以有多个控制器。所有这些控制器和 它们包含的操作方法必须共享相同的身份验证 由为该路由配置的消息处理程序强制执行。其他 单词,a执行的身份验证的最低粒度 消息处理程序位于路由级别。