消息处理程序和Http模块?

时间:2014-10-24 18:58:51

标签: asp.net asp.net-web-api httpmodule message-handlers

  

在ASP.NET Web API中,HTTP请求和响应在a中处理   服务器上的管道。

如果我想在管道的最初阶段添加一些逻辑或全局行为,我应该在消息处理程序中执行它。 (例如:身份验证)

但是Http模块管道怎么样?它适合这整个故事?

查看web api生命周期的这个编号阶段:

http://i.stack.imgur.com/jkQe8.jpg

enter image description here

但是查看Http模块的一般事件(包含更多但是...)enter image description here

问题:

- 这两个系统如何结合在一起?我的意思是如果有1张包含web api和http模块的图片,那么这些数字是多少? (我在图像中添加了数字以便于参考)

- 我总是听说如果我想在管道中更早地做事我应该使用消息处理程序,但是例如HttpModule的BeginRequest呢?我知道在这个阶段有些对象是空的但是,httpsodule的后期阶段确实会对HttpContetxt的对象进行充气 - 然而,webapi的人说:使用MessageHandlers ....(它是否与selfhoster环境有关)?

1 个答案:

答案 0 :(得分:6)

要将下图合并到顶部,请想象下图中的IHttpHandler框对应于下图中的ASPX,以便将下图放在顶部图像的左下角。因此,8和9是IIS ASP.NET管道的一部分。 IIS管道运行模块等,并在处理程序处理请求时终止。使用Web API,该处理程序恰好是HttpControllerHandler,这就是Web API管道启动的地方。如果查看HttpControllerHandler,请求和响应是特定于其左侧的ASP.NET,右侧是HttpRequestMesssage,这是特定于Web API的。

对于第二个问题,您在Web API管道中最早可以做的是消息处理程序。 HttpModule将更早,但不是Web API的一部分,而是托管。权衡是,如果你有一个HttpModule,你只能在IIS中使用它,而消息处理程序可以在任何主机上运行,​​因为它是特定于Web API和特定于主机的。我在最近的SO回复中一直提到我的MSDN文章,但后来碰巧这篇文章与被问到的问题有关。所以,我没有其他去,但再次链接它。在这里你go。我对该文章中的不同选项进行了比较。