Web API 源码剖析之全局配置
Web API 源码剖析之全局配置
Web API 均指Asp.net Web API 。本节讲述的是基于Web API 系统在寄宿于IIS.
本节主要讲述Web API全局配置。它是如何优雅的实现这个配置。做过MVC 都知道Global文件来初始化。Web API 本质上也是ASP.NET applications。所以也是在Global定义里一个GlobalConfiguration静态类。该类作用就是初始化ASP.NET applications.如下是GlobalConfiguration的定义。
//
// 摘要:
// 为 ASP.NET 应用程序提供全局 System.Web.Http.HttpConfiguration。
public static class GlobalConfiguration
{
public static HttpConfiguration Configuration { get; }
public static HttpMessageHandler DefaultHandler { get; }
//
// 摘要:
// 获取全局 System.Web.Http.HttpServer。
//
// 返回结果:
// 全局 System.Web.Http.HttpServer。
public static HttpServer DefaultServer { get; }public static void Configure(Action<HttpConfiguration> configurationCallback);
}
其中定义了3个静态只读属性和1个参数是委托类型的方法,供开发人员自己来初始化配置。
- Configuration 只读属性是HttpConfiguration类型。 用户来定义applications。主要定义一些依赖注入,参数绑定,消息格式程序,路由,过滤器。消息格式化程序,服务(注意这里的服务不是我们在开发中,后台给前台提供服务,而是applications为自己处理请求所需要类型协作集合)等。我们将在后面详细讲述HttpConfiguration。
- DefaultHandler 是HttpMessageHandler。默认的消息处理程序。我们查看HttpMessageHandler得知,是一个抽象类,这里默认初始化new HttpRoutingDispatcher,其实HttpRoutingDispatcher也是一个消息处理程序,我们称之为路由分发器。它的默认的消息处理终结点,作用是根据路由匹配,如果找到消息处理程序,就处之。否则就将请求分发给HttpControllerDispatcher也是一个消息处理程序,我们称之为控制器分发器。了解过WCF 的同学,对这个应该会很熟悉。我们将在后面详细讲述消息处理程序。
- DefaultServer 是HttpServer类型。本质上也是一种消息处理程序。因为HttpServer继承于DelegatingHandler,而DelegatingHandler又继承于HttpMessageHandler,后面章节将详细讲述。
- Configure(Action<HttpConfiguration> configurationCallback),定义了一个参数为HttpConfiguration的委托Action类型,方便在外部配置applications。这是设置非常巧妙的地方。通过反编译工具查看GlobalConfiguration定义使用了延迟加载来实现,代码实现的非常优雅。代码如下:
//延迟加载
private static Lazy<HttpConfiguration> _configuration = CreateConfiguration();
//只读配置属性
public static HttpConfiguration Configuration
{
get { return _configuration.Value; }
}private static Lazy<HttpConfiguration> CreateConfiguration()
{
return new Lazy<HttpConfiguration>(() =>
{
HttpConfiguration config = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes));
ServicesContainer services = config.Services;
Contract.Assert(services != null);
services.Replace(typeof(IAssembliesResolver), new WebHostAssembliesResolver());
services.Replace(typeof(IHttpControllerTypeResolver), new WebHostHttpControllerTypeResolver());
services.Replace(typeof(IHostBufferPolicySelector), new WebHostBufferPolicySelector());
services.Replace(typeof(IExceptionHandler),
new WebHostExceptionHandler(services.GetExceptionHandler()));
return config;
});
}
有兴趣的朋友可以下载web Api 源码查看。http://aspnetwebstack.codeplex.com/wikipage?title=Contributors.
Web API 源码剖析之全局配置的更多相关文章
- Web API 源码剖析之默认配置(HttpConfiguration)
Web API 源码剖析之默认配置(HttpConfiguration) 我们在上一节讲述了全局配置和初始化.本节我们将就全局配置的Configuration只读属性进行展开,她是一个类型为HttpC ...
- Web API 源码剖析之默认消息处理程序链--》路由分发器(HttpRoutingDispatcher)
我们在上一节讲述了默认的DefaultServer(是一个类型为HttpServer的只读属性,详情请参考 Web API 源码剖析之全局配置).本节将讲述DefaultHandler(是一个Http ...
- Web API 源码剖析之默认消息处理程序链之路由分发器(HttpRoutingDispatcher)
Web API 源码剖析之默认消息处理程序链-->路由分发器(HttpRoutingDispatcher) 我们在上一节讲述了默认的DefaultServer(是一个类型为HttpServer的 ...
- Web API源码剖析之HttpServer
Web API源码剖析之HttpServer 上一节我们讲述全局配置.本节将讲述全局配置的DefaultServer,它是一个HttpServer类型. 主要作用就是接受每一次请求,然后分发给消息处理 ...
- Web Api源码(路由注册)
这篇文章只是我学习Web API框架的输出,学习方法还是输出倒逼输入比较行得通,所以不管写的好不好,坚持下去,肯定有收获.篇幅比较长,仔细思考阅读下来大约需要几分钟. 做.NET开发有好几年时间了,从 ...
- STL源码剖析之空间配置器
本文大致对STL中的空间配置器进行一个简单的讲解,由于只是一篇博客类型的文章,无法将源码表现到面面俱到,所以真正感兴趣的码农们可以从源码中或者<STL源码剖析>仔细了解一下. 1,为什么S ...
- 《STL源码剖析》环境配置
首先,去侯捷网站下载相关文档:http://jjhou.boolan.com/jjwbooks-tass.htm. 这本书采用的是Cygnus C++ 2.91 for windows.下载地址:ht ...
- 长期作业:web框架源码剖析
Tornado框架 1.1. 手动安装 1.2. 从简单的开始:分析红框部分的源码 Django框架
- WorldWind源码剖析系列:配置载入器类ConfigurationLoader
配置载入器类ConfigurationLoader主要从指定的路径中加载保存星球相关参数的xml文件,从中读取数据来构造星球对象及其所关联的可渲染子对象列表并返回.该类的类图如下所示. 该类所包含的主 ...
随机推荐
- HandBrake 开源视频转码器、编码转换器、格式转换器
HandBrake 开源视频转码器.编码转换器.格式转换器 点击下图进入官网下载页面:https://handbrake.fr/downloads.php macOS 下可能会阻止安装! 其实也不是安 ...
- 第十章 企业项目开发--分布式缓存Redis(2)
注意:本章代码是在上一章的基础上进行添加修改,上一章链接<第九章 企业项目开发--分布式缓存Redis(1)> 上一章说了ShardedJedisPool的创建过程,以及redis五种数据 ...
- BZOJ3551: [ONTAK2010]Peaks加强版【Kruskal重构树】【主席树】
重要的事情说三遍 不保证图联通 不保证图联通 不保证图联通 那些和我一样认为重构树是点数的童鞋是要GG Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个 ...
- POJ 2441 Arrange the Bulls 状态压缩递推简单题 (状态压缩DP)
推荐网址,下面是别人的解题报告: http://www.cnblogs.com/chasetheexcellence/archive/2012/04/16/poj2441.html 里面有状态压缩论文 ...
- ssh-add时候提示Could not open a connection to your authentication agent
先执行下ssh-agent bash
- UVA11525 【Permutation】
分析 简述"康托展开" 康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩.设有\(n\)个数\((1,2,3,4,-,n)\),可以有组成不同(\(n!\) ...
- MVC思想-程序的控制流程-Struts2和SpringMVC黑马流程图
1.初探 javaEE就是搞清前后台是怎么交互的,而控制那个交互的就被称为是:C:控制器 C负责协调调度程序如何执行的,M负责读数据的处理,比如说:验证输入的密码是否正确,是否 有这个权限.V就简单了 ...
- SQL Server 中关于EXCEPT和INTERSECT的用法
熟练使用SQL Server中的各种用法会给查询带来很多方便.今天就介绍一下EXCEPT和INTERSECT.注意此语法仅在SQL Server 2005及以上版本支持. EXCEPT是指在第一个集合 ...
- java打jar包的几种方式详解
经常会头疼于一个jar包是如何制作的,包括maven的打包方式,springboot的打jar包的原理,jar包稍稍有错误就会完全无法运行.在网上折腾了很久终于有些思路和步骤,在这里做个笔记 本文目录 ...
- 使用fiddler进行genymotion安卓虚拟机手机抓包
1.首先先下载fiddler,这个直接百度就有啦. 2.打开fiddler ,可以看到这个界面还是挺帅的: 3.选择Tools - Fiddler Options -Https选项卡将配置设置为如下: ...