ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver
2016-06-14 23:50
666 查看
ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver
Message
WebAPI作为通信架构必定包含包含请求与响应两个方法上的报文,在WebAPI它们分别是HttpRequestMessage,HttpResponseMessage。对于HttpResponseMessage之前在WebAPI返回结果中有应用。HttpRequestMessage
请求报文包含请求地址(RequestUri),请求方法(Method),头信息(Headers),报文信息(Content)以及Http版本(Versions)HttpResponseMessage
请求报文包含状态码(StatusCode),原因短句(ReasonPhrase),头信息(Headers),报文信息(Content)以及Http版本(Versions)HttpConfiguration
HttpConfiguration在WebAPI大概有如下几个作用:设置通信管道
存储全局信息(比如Filter,Route,Formatter)
提供一个Ioc架构,用于WebAPI的扩展
WebAPI对ServicesContainer的提供的派生类是DefaultServices,在DefaultServices,包含了两种依赖注入方法:1,单一派生类型注入(multi),2,多派生类型注入(single),即在注入派生类型的数量有区别。比如在获取url参数的时候有QueryString,RouteData两种方式,而这两种方式是通过QueryStringValueProvider与RouteDataValueProvider两种类型来实现的(实际在DefaultServices注入是这人两个类对应的Factory类),这两种类型属于平行关系,所以这个时候能需要采用multi方法注入。
这些类型都是在DefaultServces的构造中注入的。
下面我写的四个Action分别是获取所有multiServices,获取所有singleServices,向multiServices中添加一个自定义的ValueProviderFactory,向singleServices中添加自定义的IExceptionHandler.
ASP.NET WebAPI中引用了程序集System.Web.Http.WebHost,GlobalConfiguration就在该程序集下.它包含了一个HttpConfiguration属性.还一个配置HttpConfiguration的方法
另外还有一个HttServer
另外在ApiController的很多属性都能找到HttpConfiguraiton
Configuration
ControllerContext.Configuration
RequestContext.Configuration
这些HttpConfiguration都来自对GlobalConfiguration.Configuration的引用.
DependencyResolver
WebAPI为我们提供了一个Ioc框架,即DependencyResolver在WebAPI中DependencyResolver并没有像其它组件一样注册在ServicesContainer中,而是直接注册在HttpConfiguration中(DependencyResolver属性).
别个HttpRequestMessage中也有一扩展方法GetDependencyScope来获取DependencyScope,该方法获取的是HttpRequestMessage的Properties的DependencyResolver,这里的DependencyResolver也来自HttpConfiguration.
在WebAPI中也定义了一个EmptyResolver,它只是一个空的Resolver,所以在WebAPI默认就是采用直接反射方式.
源码
Github: https://github.com/BarlowDu/WebAPI (API_8)相关文章推荐
- HttpClient的使用,整理了一个工具类
- 【网络编程3】Java组播套接字
- Python网络数据采集
- 读《TCPL》- 介绍
- linux网络编程----->线程同步-->互斥量和读写锁
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)
- python之basic加密http下载
- C# Http Get 提交请求
- VMWare虚拟机下RedHat 9.0linux的网络设置
- 理解OAuth 2.0
- Httpclient远程调用WebService示例
- thrift使用http并部署到iis
- http和https协议
- http和https协议
- C/C++网络编程总结
- 基于TCP/IP协议下的Socket通信
- 利用Wireshark 解密HTTPS流量
- Android网络编程(一)
- 【网络流24题----01】飞行员配对方案问题
- nginx做前端反代负载均衡,后端httpd+tomcat