心有猛虎细嗅蔷薇

心有猛虎细嗅蔷薇

1 管道模型 

1 Asp.Net Web Form管道

请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理。HttpRuntime通过请求信息创建HttpContext上下文对象,此对象将贯穿整个管道,直到响应结束。同时创建或从应用程序池里初始化一个HttpApplication对象,由此对象开始处理之前注册的多个HttpModule。之后调用HandlerFactory创建Handler处理程序,最终处理此次请求内容,生成响应返回。

ASP.Net 管道模型 VS  Asp.Net Core 管道 总结-LMLPHP

2 ASP.Net  MVC  管道

 

 ASP.Net 管道模型 VS  Asp.Net Core 管道 总结-LMLPHP

3、Asp.Net Core管道

IHttpModule和IHttpHandler不复存在,取而代之的是一个个中间件(Middleware)。

Server将接收到的请求直接向后传递,依次经过每一个中间件进行处理,然后由最后一个中间件处理并生成响应内容后回传,再反向依次经过每个中间件,直到由Server发送出去。

中间件就像一层一层的“滤网”,过滤所有的请求和相应。这一设计非常适用于“请求-响应”这样的场景——消息从管道头流入最后反向流出。

ASP.Net 管道模型 VS  Asp.Net Core 管道 总结-LMLPHP

4 .net Core Middleware

 Middleware支持Run、Use和Map三种方法进行注册,下面将展示每一种方法的使用方式。

  • Run的这种用法表示注册的此中间件为管道内的最后一个中间件,由它处理完请求后直接返回。
  • 通过Use方法注册的中间件,如果不调用next方法,效果等同于Run方法。当调用next方法后,此中间件处理完后将请求传递下去,由后续的中间件继续处理。
  • Map方法主要通过请求路径和其他自定义条件过滤来指定注册的中间件,看起来更像一个路由。

Asp.Net Core框架内置了几个中间件

ASP.Net 管道模型 VS  Asp.Net Core 管道 总结-LMLPHP

4 Asp.net HttpModule 

用处:

  • 权限认证和授权:每个请求都经过Module,所以做权限认证很好
  • URL 转发
  • 发爬虫

ASP.NET 请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET 把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。

注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。

 HttpModule生命周期示意图

ASP.Net 管道模型 VS  Asp.Net Core 管道 总结-LMLPHP

Asp.net  HttpHandler

 HttpHandler是asp.net真正处理Http请求的地方。在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

当一个HTTP请求经过HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandlerFactory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。

一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。

 可以在一个.ashx文件中实现IHttpHandler

04-27 04:32