>(delegate 7: { 8: HttpConfiguration configuration = new HttpConfiguration 与上面我们介绍的那些“标准化组件”不同,默认使用的DependencyResolver并未注册到当前的ServicesContainer对象上,而是直接注册到了当前HttpConfiguration上面 如下面的代码片断所示,当前使用的DependencyResolver直接通过HttpConfiguration的DependencyResolver属性来获取和设置。 1: public class HttpConfiguration : IDisposable 2: { 3: //其他成员 4: public HttpConfiguration _dependencyResolver = value; 18: } 19: } 20: } 从上面的代码片断我们还可以看出默认注册到HttpConfiguration
httpConfiguration); 4: protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage 我们接下来从表示当前请求的HttpRequestMessge对象中直接获取当前HttpConfiguration对象,并调用扩展方法GetCorsPolicyProviderFactory得到注册在它上面的 在这之后,我们调用HttpConfiguration对象的另一个扩展方法GetCorsEngine得到注册其上的CorsEngine,并将此前得到的CorsRequestContext和CorsPolicy 的EnableCors方法 通过上面的介绍我们知道针对ASP.NET Web API的CORS编程首先需要做的就是在程序启动之前调用当前HttpConfiguration的扩展方法EnableCors开启对 httpConfiguration); 4: public static void EnableCors(this HttpConfiguration httpConfiguration
string, string> RouteVersionSuffixMapping { get; set; } public ODataVersionControllerSelector(HttpConfiguration } } 修改WebApiConfig.Register方法 public static class WebApiConfig { public static void Register(HttpConfiguration private readonly HashSet<string> _duplicates; public NormalVersionControllerSelector(HttpConfiguration } 修改WebApiConfig.Register方法 public static class WebApiConfig { public static void Register(HttpConfiguration configuration; public VersionControllerSelector(HttpConfiguration configuration)
HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( 当调用 UseWebApi 时,ASP.NET Web API 中间件组件被添加到OWIN管道中用所提供的 HTTPConfiguration 对象。 ASP.NET Web API 仍然使用现有的 HttpConfiguration 类来定义路由等。另外说明下,通过OWIN宿主ASP.NET WebAPI还可以完美的兼容Mono 3哦。
如果在构造HttpServer的时候没有显式指定这两个属性的值(调用默认的无参构造函数创建HttpServer),在默认情况下会创建一个HttpConfiguration作为Configuration的属性值 由于HttpConfiguration类型实现了IDisposable接口,所以HttpServer重写了虚方法Dispose并在该方法中完成了对HttpConfiguration对象的释放。 既然整个管道都是由HttpConfiguration进行配置,那么自定义HttpMessageHandler的注册自然也可以利用它来完成。 如下面的代码片断所示,HttpConfiguration具有一个只读的集合类型的MessageHandlers,需要注册的HttpMessageHandler需要添加到此集合之中。 通过上面对HttpServer的介绍我们知道它会将当前SynchronizationContext和HttpConfiguration添加到表示当前请求的HttpRequestMessage对象的属性字典中
,注册的CorsEngine同样是被添加到HttpConfiguration的属性字典之中。 CorsEngine的注册可以通过调用HttpConfiguration如下所示的扩展方法SetCorsEngine来完成。 另一个扩展方法GetCorsEngine用于获取注册的CorsEngine,如果在调用此方法时CorsEngine尚未被注册,一个CorsEngine对象会被创建出来并自动注册到HttpConfiguration httpConfiguration, ICorsEngine corsEngine); 5: public static ICorsEngine GetCorsEngine(this HttpConfiguration httpConfiguration); 6: } CORS系列文章 [1] 同源策略与JSONP [2] 利用扩展让ASP.NET Web API支持JSONP [3] W3C的CORS
如下面的代码片断所示,通过定义在HttpControllerContext中的属性我们可以得到用于配置消息处理管道的HttpConfiguration对象和封装路由数据的HttpRouteData对象, configuration, IHttpRouteData routeData, HttpRequestMessage request); 5: 6: public HttpConfiguration 如下面的代码片断所示,我们可以通过HttpControllerDescriptor的属性Configuration、ControllerName和ControllerType获取当前的HttpConfiguration where T: class; 10: public virtual Collection<IFilter> GetFilters(); 11: 12: public HttpConfiguration 我们在HttpRequestMessage和HttpConfiguration类型中已经看到过了类似的设计。
>(delegate 7: { 8: HttpConfiguration configuration = new HttpConfiguration 与上面我们介绍的那些“标准化组件”不同,默认使用的DependencyResolver并未注册到当前的ServicesContainer对象上,而是直接注册到了当前HttpConfiguration上面 如下面的代码片断所示,当前使用的DependencyResolver直接通过HttpConfiguration的DependencyResolver属性来获取和设置。 1: public class HttpConfiguration : IDisposable 2: { 3: //其他成员 4: public HttpConfiguration(HttpRouteCollection routes) 5: { 6: this.
从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCorsAttribute特性。 具体来说,所谓注册CorsPolicyProviderFactory实际上就是将它保存到当前HttpConfiguration的Properties属性表示的字典中。 CorsPolicyProviderFactory的注册可以通过HttpConfiguration如下所示的扩展方法SetCorsPolicyProviderFactory来完成。 httpConfiguration); 5: public static void SetCorsPolicyProviderFactory(this HttpConfiguration httpConfiguration, ICorsPolicyProviderFactory corsPolicyProviderFactory); 6: } ?
对于Web Host这种寄宿方式,这么一个HttpConfiguration可以通过静态类型GlobalConfiguration来获取。 如下面的代码片断所示,GlobalConfiguration具有一个静态只读属性Configuration,它返回的正式我们用于配置的全局HttpConfiguration对象。 > _configuration = new Lazy<HttpConfiguration>(delegate { 5: HttpConfiguration config = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes)); 6: //其他操作 7: return config; 8: }); 9: 10: public static HttpConfiguration Configuration 11:
我们编写Web项目的写WebApiConfig;代码如下: public static class WebApiConfig { public static void Register(HttpConfiguration RouteParameter.Optional } ); } } 可以看到WebApiConfig是个静态类中,我们在其中创建了静态注册方法Register,在方法内,我们主要在做一件事,那就是为HttpConfiguration 在WebApiConfig类中,我们还用到了这样一个类WebApiAttribute,我们在为HttpConfiguration对象的Filters属性,添加了这个类的对象。
public class VersionConstrollerSelector : IHttpControllerSelector { private readonly HttpConfiguration _conf; public VersionConstrollerSelector(HttpConfiguration configuration) { 方法中替换原来的IHttpControllerSelector public static class WebApiConfig { public static void Register(HttpConfiguration VersionConstrollerSelector(config)); } } 并且在其方法创建新的路由 public static void Register(HttpConfiguration
partial class Startup { public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); //配置路由 config.Routes.MapHttpRoute(
] 标记, 例如: [ModelBinder(typeof(GeoPointModelBinder))] public class GeoPoint { // .... } 最后, 还可以在 HttpConfiguration model-binder provider 来使用, 代码如下: public static class WebApiConfig { public static void Register(HttpConfiguration return new CookieValueProvider(actionContext); } } 然后将 CookieValueProviderFactory 注册到 HttpConfiguration 实例: public static void Register(HttpConfiguration config) { config.Services.Add( typeof( 下面是一个使用 IfNoneMatch 的例子: public HttpResponseMessage Get([IfNoneMatch] ETag etag) { ... } 除了直接使用这个标记, 也可以在 HttpConfiguration
HttpConfiguration 对象的 DependencyResolver 拥有全局作用域, 当 Web API 创建 Controller 时, 会调用 BeginScope 方法, 返回一个类型为 WindsorDependencyScope(childContainer); } } 注册 WindsorDependencyResolver 通过下面的代码将 WindsorDependencyResolver 注册到 HttpConfiguration 就可以使用了: public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); /
public void Configuration(IAppBuilder app) { //创建一个HTTP的实例配置 HttpConfiguration config = new HttpConfiguration(); //映射路由 config.Routes.MapHttpRoute(
HY_WebApi.HelpPages { public static class WebApiConfig { public static void Register(HttpConfiguration Odata控制器的API文档 步骤1,重构ApiExplorer public class CustomApiExplorer : ApiExplorer { private HttpConfiguration configuration; public CustomApiExplorer(HttpConfiguration configuration) : base( OdataRelativePath { public static void GetOdataRelativePath(CustomApiExplorer customApiExplorer, HttpConfiguration
System.Web.Http; namespace CorsDemo.Api { public static class WebApiConfig { public static void Register(HttpConfiguration 不需要太多,在WebApiConfig.cs文件中配置HttpConfiguration的EnableCors方法即可。 System.Web.Http.Cors; namespace CorsDemo.Api { public static class WebApiConfig { public static void Register(HttpConfiguration config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); } private static void EnableCrossSiteRequests(HttpConfiguration
application/json")); return result; } } 找到App_Start中的WebApiConfig.cs文件,打开找到Register(HttpConfiguration IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 添加后代码如下: public static void Register(HttpConfiguration
接下来的代码展示如何启用他们: public static class WebApiConfig { public static void Register(HttpConfiguration { return new CookieValueProvider(actionContext); } } 添加value provider 工厂到HttpConfiguration ,代码如下: public static void Register(HttpConfiguration config) { config.Services.Add(typeof(ValueProviderFactory 在HttpConfiguration 对象上,ParameterBindingRules 是一个匿名方法类型(HttpParameterDescriptor -> HttpParameterBinding 2、否则,查看一个函数的HttpConfiguration.ParameterBindingRules ,它返回一个非null的HttpParameterBinding 。