Asp.net web Api源码分析-HttpServer的创建

本文深入探讨ASP.NET Web API的源码,重点分析HttpServer的创建过程和HttpMessageInvoker的工作原理。从HttpRequestMessage开始,逐步解析HttpServer、HttpRoutingDispatcher、HttpControllerDispatcher等组件的初始化和交互,揭示HTTP请求的处理流程。
摘要由CSDN通过智能技术生成

紧接着前文Asp.net web Api源码分析-HttpRequestMessage的创建 HttpRequestMessage实例已经创建好了,现在我们来看看  

Task responseBodyTask = _server.Value.SendAsync(request, CancellationToken.None)

                .Then(response => ConvertResponse(httpContextBase, response, request));

这里的_server.Value.SendAsync是真正处理http请求的,ConvertResponse只是处理结果而已的。我这里还是按早代码的执行顺序依次说吧。首先我们来看看这里的_server是个什么东东:

private static readonly Lazy<HttpMessageInvoker> _server =
            new Lazy<HttpMessageInvoker>(
                () =>
                {
                    HttpServer server = new HttpServer(GlobalConfiguration.Configuration, GlobalConfiguration.DefaultHandler);
                    return new HttpMessageInvoker(server);
                });

这里的_server是一个HttpMessageInvoker的实例,这里还需要一个HttpServer的变量。其中GlobalConfiguration的DefaultHandler定义如下:

  private static Lazy<HttpMessageHandler> _defaultHandler = new Lazy<HttpMessageHandler>(
            () => new HttpRoutingDispatcher(_configuration.Value));
  public static HttpMessageHandler DefaultHandler
        {
            get { return _defaultHandler.Value; }
        }

DefaultHandler属性其实是一个HttpRoutingDispatcher实例。这里我们首先看看HttpRoutingDispatcher的构造函数:

public class HttpRoutingDispatcher : HttpMessageHandler
{
   private readonly HttpConfiguration _configuration;
   private readonly HttpMessageInvoker _defaultInvoker;
    public HttpRoutingDispatcher(HttpConfiguration configuration)
            : this(configuration, new HttpControllerDispatcher(configuration))
        {
        }
        public HttpRoutingDispatcher(HttpConfiguration configuration, HttpMessageHandler defaultHandler)
        {
            _configuration = configuration;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值