5

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

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

但是 Http 模块管道呢?它在整个故事中的位置?

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

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

在此处输入图像描述

但是查看 Http 模块一般事件(包含更多但...)在此处输入图像描述

问题 :

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

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

4

1 回答 1

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 文章,但碰巧这篇文章与所提出的问题相关。所以,我别无他法,只能再次链接它。你。我在那篇文章中比较了不同的选项。

于 2014-10-25T02:34:41.367 回答