HttpModule vs DelegatingHandler - 优点/缺点?

时间:2016-09-07 14:54:52

标签: c# asp.net-web-api asp.net-web-api2 httpmodule delegatinghandler

我正在尝试在ASP.NET WebAPI项目中记录整个传入请求和传出响应。虽然我同意HttpModule,但我的雇主坚持使用DelegatingHandler。您如何向她解释为什么我们应该使用HttpModule而不是print([[i+j for i in "abc"] for j in "def"]) ?或者我错了吗?

1 个答案:

答案 0 :(得分:6)

我会使用DelegatingHandlerDelegatingHandler是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执行的身份验证的最低粒度   消息处理程序位于路由级别。