HttpConfiguration(ASP.NET Web API管道的配置是通过HttpConfiguration来完成) :

包括路由注册在内的对整个ASP.NET Web API管道的配置是通过HttpConfiguration来完成的。
如果采用Web Host寄宿模式,此HttpConfiguration可以通过静态类型
GlobalConfiguration来获取。
 
在Application_Start()方法中进行路由注册:
GlobalConfiguration.Configure(WebApiConfig.Register);
 
Configure方法传入一个委托参数
来看一下这个委托的传入参数HttpConfiguration类型的变量Configuration:
其在CreateConfiguration方法中进行实例化:
构造函数:
RouteTable.Routes是RouteCollection类型的对象,是ASP.NET路由系统中的全局路由集合
HostedHttpRouteCollection包含一个RouteCollection类型的变量,在构造函数中将传入的RouteTable.Routes对象赋值给了该变量
构造函数:
HttpConfiguration中定义了一个HttpRouteCollection类型的属性Routes,在构造函数中进行了赋值,传入的是HostedHttpRouteCollection类型的对象,HostedHttpRouteCollection类是HttpRouteCollection的子类
 
再看一下这个,Routes属性实际是HostedHttpRouteCollection类型,所以采用Web Host寄宿模式下全局路由注册在HostedHttpRouteCollection中
 
MapHttpRoute方法为扩展方法:
其中调用了CreateRoute方法,CreateRoute为虚方法,被子类重写,所以来看HostedHttpRouteCollection中的CreateRoute方法
创建的是HostedHttpRoute类型的对象
MapHttpRoute中的Add方法在HostedHttpRouteCollection中重写:
由此可见,Web Host模式的路由注册,还是将路由对象注册到了ASP.NET路由系统的RouteCollection集合中
 
我们可以将HostedHttpRoute对象看成对一个Route对象的封装,如下面的代码片段所示,
这个被封装的Route对象对应着只读属性OriginalRoute。实现在HostedHttpRoute之中的核
心路由功能基本上是通过这个Route对象完成的,所以我们才说ASP.NET Web API的路由在
Web Host寄宿模式下还是利用ASP.NET自身的路由系统实现的。

(OriginalRoute的类型为Route(实际为HttpWebRoute)类型,正是ASP.NET系统的路由对象类型)

 
总结:

Web API框架学习——路由(一)的更多相关文章

  1. Web API框架学习——消息管道(二)

    HttpServer的GlobalConfiguration中创建: GlobalConfiguration中确定了第一个HttpMessageHandler消息管道: 首:DefaultServer ...

  2. ASP.NET Web API框架揭秘:路由系统的几个核心类型

    ASP.NET Web API框架揭秘:路由系统的几个核心类型 虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分 ...

  3. ASP.NET Web API 框架研究 ASP.NET Web API 路由

    ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...

  4. 学习ASP.NET Web API框架揭秘之“HTTP方法重写”

    最近在看老A的<ASP.NET Web API 框架揭秘>,这本书对于本人现阶段来说还是比较合适的(对于调用已经较为熟悉,用其开发过项目,但未深入理解过很多内容为何可以这样“调用”).看到 ...

  5. ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道

    Web Host 模式下的路由本质上还是通过ASP.NET 路由系统来进行路由的,只是通过继承和组合的方式对ASP.NET路由系统的内部的类进行了一些封装,产生自己专用一套类结构,功能逻辑基本都是一样 ...

  6. abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)

    Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...

  7. Web Api源码(路由注册)

    这篇文章只是我学习Web API框架的输出,学习方法还是输出倒逼输入比较行得通,所以不管写的好不好,坚持下去,肯定有收获.篇幅比较长,仔细思考阅读下来大约需要几分钟. 做.NET开发有好几年时间了,从 ...

  8. 【ASP.NET Web API教程】4.1 ASP.NET Web API中的路由

    原文:[ASP.NET Web API教程]4.1 ASP.NET Web API中的路由 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. ...

  9. Web API中的路由(一)——约定路由

    一.Web API中的路由概念 路由的作用用一句话说明:通过request的uri找到处理该请求的Controller,Action,以及给Action的参数赋值. 一些路由的基本概念: route: ...

随机推荐

  1. JavaScript基础:创建对象

    先来看两种简单的对象创建方式: 1.Object构造函数方法 var person = new Object(); person.name = "Nicholas"; person ...

  2. .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。

    本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start EasyNetQ简介 Ea ...

  3. JAVA finally字句的异常丢失和返回值覆盖解析

    转载:http://blog.csdn.net/sureyonder/article/details/5560538 Java虚拟机在每个try语句块和与其相关的catch子句的结尾 处都会“调用”f ...

  4. Oracle BEQ方式连接配置

    Oracle BEQ方式连接配置 服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接可以理解为进程间直接通信,不需要走网络监听,性能更高. 可以参考MOS:How To Connect Us ...

  5. 《HelloGitHub月刊》第10期

    前言 这一年感谢大家的支持,小弟这里给大家拜年了! <HelloGitHub月刊>会一直做下去,欢迎大家加入进来提供更多的好的项目. 最后,祝愿大家:鸡年大吉- <HelloGitH ...

  6. iOS-直播开发(开发从底层做起)

    一直在忙, 也没写过几次播客! 但一直热衷于直播开发技术, 公司又不是直播方向的, 所以就年前忙里偷袭研究了一下直播开发, 然后翻阅了很多大神的技术博客等, 写了一个简单的Demo, 又根据网上大神们 ...

  7. (@WhiteTaken)设计模式学习——工厂方法模式

    这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口.而简单工厂,把核心写在了一个类上,不利于拓展. 举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个F ...

  8. linux下读取系统内存的demo

    #include <stdio.h> #define KIBIBYTE_SIZE 1024LL #define MEBIBYTE_SIZE 1048576LL #define GIBIBY ...

  9. JDBC连接数据库(二)——连接池

    参考博客:http://www.cnblogs.com/xdp-gacl/p/4002804.html 一. 应用程序直接建立数据库连接模型 应用程序直接每次访问数据库时,都建立创建一个数据库的链接, ...

  10. php解析

    vim /usr/local/apache/conf/httpd.conf     ##修改apache的网页配置文件  →  解析php文件 /usr/local/apache/bin/apache ...