WebApi2官网学习记录---Configuring
Configuration Settings
WebAPI中的configuration settings定义在HttpConfiguration中。有一下成员:
- DependencyResolver
- Filters
- Formatters
- IncludeErrorDetailPolicy
- Initializer
- MessageHandlers
- ParameterBindingRules
- Properties
- Routes
- Services
在ASP.NET Hosting中配置WebApi
namespace WebApplication1
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// TODO: Add any additional configuration code.
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
OWIN Self-Hosting中配置WebAPI
使用OWIN进行self-Hosting,需要创建一个HttpConfiguration实例,在这个实例中添加一些配置,然后将这个实例传给Owin.UseWebApi的扩展方法。
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
Global Web API Services
HttpConfiguration.Services包含一些列的global services,WebAPI使用这些services执行各种各样的tasks,例如controller的选择以及content negotiation。
Services集合会被默认定义的services初始化,但是可以进行定义实现,一些services支持多个实例,一些仅支持一个实例。
支持单个实例的services
IActionValueBinder、IApiExplorer、IAssembliesResolver、IBodyModelValidator、IContentNegotiator、IDocumentationProvider、IHostBufferPolicySelector、IHttpActionInvoker、IHttpActionSelector、IHttpControllerActivator、IHttpControllerSelector、IHttpControllerTypeResolver、ITraceManager、ITraceWriter、IModelValidatorCache
支持多实例的services
IFilterProvider、ModelBinderProvider、ModelMetadataProvider、ModelValidatorProvider、ValueProviderFactory
将自定义的实现添加到支持多实例的service,可以使用Add和Insert的方式
config.Services.Add(typeof(IFilterProvider), new MyFilterProvider());
config.Services.Insert(typeof(IFilterProvider),0,new MyFilterProvider());
使用自定义的实现替换仅支持单实例的service
config.Services.Replace(typeof(ITraceWriter), new MyTraceWriter());
Per-Controller Configuration
使用per-controller方式可以重写如下设置:
Media-type formatters
Parameter binding rules
Services
通过自定义实现IControllerConfiguration接口的特性,然后应用到controller上可以实现上述目标using System;
using System.Web.Http;
using System.Web.Http.Controllers;namespace WebApplication1.Controllers
{public class UseMyFormatterAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings settings,
HttpControllerDescriptor descriptor)
{
// Clear the formatters list.
settings.Formatters.Clear(); // Add a custom media-type formatter.
settings.Formatters.Add(new MyFormatter());
}
} [UseMyFormatter]
public class ValuesController : ApiController
{
// Controller methods not shown...
}
}
IControllerConfiguration接口的作用:如果某个控制器是使用此接口的特性修饰的,则将调用此接口来初始化该控制器设置。
IControllerConfiguration.Initialize方法包含两个参数:
HttpControllerSettings这个对象是Configuration的一个子集,包含可以在per-controller时被重写的的对象HttpControllerDescriptor包含controller的描述信息
WebApi2官网学习记录---Configuring的更多相关文章
- WebApi2官网学习记录---Cookie
Cookie的几个参数: Domain.Path.Expires.Max-Age 如果Expires与Max-Age都存在,Max-Age优先级高,如果都没有设置cookie会在会话结束后删除cook ...
- WebApi2官网学习记录---批量处理HTTP Message
原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...
- WebApi2官网学习记录---Html Form Data
HTML Forms概述 <form action="api/values" method="post"> 默认的method是GET,如果使用GE ...
- WebApi2官网学习记录--HttpClient Message Handlers
在客户端,HttpClient使用message handle处理request.默认的handler是HttpClientHandler,用来发送请求和获取response从服务端.可以在clien ...
- WebApi2官网学习记录--HTTP Message Handlers
Message Handlers是一个接收HTTP Request返回HTTP Response的类,继承自HttpMessageHandler 通常,一些列的message handler被链接到一 ...
- WebApi2官网学习记录--- Authentication与Authorization
Authentication(认证) WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据: 一个HttpModel可以 ...
- WebApi2官网学习记录---单元测试
如果没有对应的web api模板,首先使用nuget进行安装 例子1: ProductController 是以硬编码的方式使用StoreAppContext类的实例,可以使用依赖注入模式,在外部指定 ...
- WebApi2官网学习记录---Tracing
安装追踪用的包 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHo ...
- WebApi2官网学习记录---异常处理
HttpResponseException 当WebAPI的控制器抛出一个未捕获的异常时,默认情况下,大多数异常被转为status code为500的http response即服务端错误. Http ...
随机推荐
- 浅述Oracle分布式事务概念
着系统的复杂性不断增加,我们所面对的分布式系统渐渐增加.分布式文件系统.分布式消息队列系统等等层出不穷,在一些行业特别是互联网行业应用广泛.分布式数据库也是目前使用比较常用的分布式系统之一. 简单来说 ...
- FineUI 点击按钮添加标签页
<html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat=&quo ...
- eclipse频繁崩溃退出
1.出现下面的崩溃情况,并且改变内存大小都没有用,而且总是生成下面两个错误日志文件: 解决: 在eclipse.ini文件里面添加一行 -XX:-UseLoopPredicate 2.eclipse崩 ...
- zip命令的使用
zip命令可以用来将文件压缩成为常用的zip格式.unzip命令则用来解压缩zip文件. 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip: # zip -r yasuo ...
- ORACLE查询数据库的锁表情况
查询数据库的锁表情况语句如下: SELECT p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_na ...
- 有几数组表单,js怎么获得数组并动态相加输出到文本框
有几数组表单,js如何获得数组并动态相加输出到文本框<input name= "fee1[] "> <input name= "fee2[] & ...
- 读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数
class A { private: int a; public: A(int x) :a(x){} A operator*(const A& x) { return A(a*x.a); } ...
- PHP echo, print, printf, sprintf函数的区别和使用
1. echo函数: 输出函数,是命令,不能返回值.echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo 1,2,$myvar,"<b>bol ...
- 文成小盆友python-num5 -装饰器回顾,模块,字符串格式化
一.装饰器回顾与补充 单层装饰器: 如上篇文章所讲单层装饰器指一个函数用一个装饰器来装饰,即在函数执行前或者执行后用于添加相应的操作(如判断某个条件是否满足). 具体请见如下: 单层装饰器 双层装饰器 ...
- 使用接口的方式调用远程服务 ------ 利用动态调用服务,实现.net下类似Dubbo的玩法。
分布式微服务现在成为了很多公司架构首先项,据我了解,很多java公司架构都是 Maven+Dubbo+Zookeeper基础上扩展的. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按 ...