zoukankan      html  css  js  c++  java
  • 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的描述信息
  • 相关阅读:
    weekly review 200812: Tire
    monthly report 200802: between the festival and the happiness
    weekly review 200813: Ill
    Android中的SharedPreferences
    如何使用Github上的开源项目
    Android四大组件
    开发者需知的10类工具
    activity中onResume()的用处
    Redhat 5.4 + ASM + RAW+ Oracle 10g RAC 安装文档
    Oracle 索引扫描的五种类型
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4465647.html
Copyright © 2011-2022 走看看