Web API框架学习——路由(一)
HttpConfiguration(ASP.NET Web API管道的配置是通过HttpConfiguration来完成) :
包括路由注册在内的对整个ASP.NET Web API管道的配置是通过HttpConfiguration来完成的。
如果采用Web Host寄宿模式,此HttpConfiguration可以通过静态类型
GlobalConfiguration来获取。
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304151959659-1021502652.png)
在Application_Start()方法中进行路由注册:
GlobalConfiguration.Configure(WebApiConfig.Register);
Configure方法传入一个委托参数
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152026143-792896114.png)
来看一下这个委托的传入参数HttpConfiguration类型的变量Configuration:
其在CreateConfiguration方法中进行实例化:
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152038330-92627062.png)
构造函数:
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152106143-2005544986.png)
RouteTable.Routes是RouteCollection类型的对象,是ASP.NET路由系统中的全局路由集合
HostedHttpRouteCollection包含一个RouteCollection类型的变量,在构造函数中将传入的RouteTable.Routes对象赋值给了该变量
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304163623596-1877036971.png)
构造函数:
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304163733393-1964194828.png)
HttpConfiguration中定义了一个HttpRouteCollection类型的属性Routes,在构造函数中进行了赋值,传入的是HostedHttpRouteCollection类型的对象,HostedHttpRouteCollection类是HttpRouteCollection的子类
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304180730362-1983396282.png)
再看一下这个,Routes属性实际是HostedHttpRouteCollection类型,所以采用Web Host寄宿模式下全局路由注册在HostedHttpRouteCollection中
MapHttpRoute方法为扩展方法:
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152154643-837797901.png)
其中调用了CreateRoute方法,CreateRoute为虚方法,被子类重写,所以来看HostedHttpRouteCollection中的CreateRoute方法
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152218659-322244115.png)
创建的是HostedHttpRoute类型的对象
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152236018-1917614642.png)
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304152258830-686036528.png)
MapHttpRoute中的Add方法在HostedHttpRouteCollection中重写:
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304165242284-1279890572.png)
由此可见,Web Host模式的路由注册,还是将路由对象注册到了ASP.NET路由系统的RouteCollection集合中
我们可以将HostedHttpRoute对象看成对一个Route对象的封装,如下面的代码片段所示,
这个被封装的Route对象对应着只读属性OriginalRoute。实现在HostedHttpRoute之中的核
心路由功能基本上是通过这个Route对象完成的,所以我们才说ASP.NET Web API的路由在
Web Host寄宿模式下还是利用ASP.NET自身的路由系统实现的。
总结:
![](https://images2015.cnblogs.com/blog/677994/201603/677994-20160304180952768-1681866381.png)