ASP.NET Core 3 源码解析 — [9]请求管道

尊重作者劳动成果,转载请注明出处,谢谢!

目录

1.请求管道

  1.1 请求上下文

  1.2 服务器

  1.3 中间件

2.注册中间件

  2.1 注册委托类型中间件

  2.2 注册强类型中间件

  2.3 注册约定名称中间件

  2.4 其它扩展方法

3.实现解析

  3.1 设计模型

  3.2 ApplicationBuilder

  3.3 HostingApplication

  3.4 DefaultHttpContextFactory

1.请求管道

在 Web 主机一节中,我们简单介绍到了 ASP.NET Core 对 HTTP 请求的处理是由一个请求处理管道来完成的,位于管道最前面的是一个 Web 服务器,用于监听、接收并响应 HTTP 请求,而 Web 服务器后面是一组中间件,用于对接收到的请求进行处理。

1.1 请求上下文

HttpContext 表示请求上下文,定义如下:

public abstract class HttpContext
{
    public abstract IFeatureCollection Features { get; }
    public abstract HttpRequest Request { get; }
    public abstract HttpResponse Response { get; }
    public abstract ConnectionInfo Connection { get; }
    public abstract WebSocketManager WebSockets { get; }
    public abstract ClaimsPrincipal User { get; set; }
    public abstract IDictionary<object, object> Items { get; set; }
    public abstract IServiceProvider RequestServices { get; set; }
    public abstract CancellationToken RequestAborted { get; set; }
    public abstract string TraceIdentifier { get; set; }
    public abstract ISession Session { get; set; }
    public abstract void Abort();
}

1.2 服务器

1.3 中间件

2.注册中间件

Startup 启动类除了用于注册依赖服务外,其主要目的是用来注册中间件的(前者是可选的,后者是必须的)。对于中间件的注册,是通过 IApplicationBuilder 接口来完成的,IApplicationBuilder 接口的定义如下:

public interface IApplicationBuilder
{
    IServiceProvider ApplicationServices { get; set; }

    IFeatureCollection ServerFeatures { get; }

    IDictionary<string, object> Properties { get; }

    IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);

    IApplicationBuilder New();

    RequestDelegate Build();
}

2.1 注册委托类型中间件

2.2 注册强类型中间件

2.3 注册约定名称中间件

2.4 其它扩展方法

3.实现解析

3.1 设计模型

3.2 ApplicationBuilder

3.3 HostingApplication

3.4 DefaultHttpContextFactory

猜你喜欢

转载自www.cnblogs.com/chenyuxin/p/Http.html