Konfigurace ASP.NET webového rozhraní API 2

Toto téma popisuje, jak nakonfigurovat ASP.NET webové rozhraní API.

Nastavení konfigurace

Nastavení konfigurace webového rozhraní API jsou definována ve třídě HttpConfiguration .

Člen Description
DependencyResolver Povolí injektování závislostí pro kontrolery. Viz Použití řešitele závislostí webového API.
Filtry Filtry akcí
Formatters Formátovací moduly typu multimédií
Politika zahrnutí podrobností o chybách Určuje, zda má server zahrnout podrobnosti o chybách, jako jsou zprávy o výjimkách a trasování zásobníku, v odpovědích HTTP. Viz IncludeErrorDetailPolicy.
Inicializátor Funkce, která provádí konečnou inicializaci HttpConfiguration.
Message Handlers HTTP obslužné programy pro zprávy.
ParametrBindingRules Kolekce pravidel pro vazbu parametrů pro akce ovladače.
Vlastnosti Obecný kontejner vlastností
trasy Kolekce tras. Viz Směrování ve webovém rozhraní API ASP.NET.
Services Kolekce služeb. Viz Služby.

Předpoklady

Visual Studio 2017 Community, Professional nebo Enterprise Edition.

Konfigurace webového rozhraní API s využitím hostování ASP.NET

V ASP.NET aplikaci nakonfigurujte webové rozhraní API voláním GlobalConfiguration.Configure v metodě Application_Start . Metoda Configure přebírá delegáta s jedním parametrem typu HttpConfiguration. Proveďte veškerou konfiguraci uvnitř delegáta.

Tady je příklad použití anonymního delegáta:

using System.Web.Http;
namespace WebApplication1
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(config =>
            {
                config.MapHttpAttributeRoutes();

                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            });
        }
    }
}

V sadě Visual Studio 2017 šablona projektu "ASP.NET webová aplikace" automaticky nastaví konfigurační kód, pokud v dialogovém okně Nový ASP.NET Projekt vyberete webové rozhraní API.

Snímek obrazovky dialogového okna nového projektu A S P .NET, s vybraným zaškrtávacím políčkem Web A P I pro automatické nastavení konfiguračního kódu.

Šablona projektu vytvoří soubor s názvem WebApiConfig.cs uvnitř složky App_Start. Tento soubor kódu definuje delegáta, kam byste měli vložit konfigurační kód webového rozhraní API.

Snímek dialogového okna Průzkumníka řešení, s vyznačeným souborem WebAPIConfig.cs červeně, uvnitř složky App_Start.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

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 }
            );
        }
    }
}

Šablona projektu také přidá kód, který volá delegáta z Application_Start.

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

Konfigurace webového rozhraní API pomocí OWIN Self-Hosting

Pokud sami provozujete server pomocí OWIN, vytvořte novou instanci HttpConfiguration. Proveďte jakoukoli konfiguraci této instance a pak předejte instanci metodě rozšíření 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); 
    } 
}

V kurzu Použití OWIN k samohostování ASP.NET webového rozhraní API 2 jsou uvedeny všechny kroky.

Globální služby webového rozhraní API

Kolekce HttpConfiguration.Services obsahuje sadu globálních služeb, které webové rozhraní API používá k provádění různých úloh, jako je výběr kontroleru a vyjednávání obsahu.

Poznámka:

Kolekce Služeb není všestranný mechanismus pro vyhledávání služeb nebo injektáž závislostí. Ukládá pouze typy služeb, které jsou známé pro architekturu webového rozhraní API.

Kolekce Services se inicializuje s výchozí sadou služeb a můžete zadat vlastní implementace. Některé služby podporují více instancí, zatímco jiné můžou mít pouze jednu instanci. (Můžete ale také poskytovat služby na úrovni kontroleru; viz Per-Controller Konfigurace.

Single-Instance Services

Service Description
IActionValueBinder Získá vazbu pro parametr.
IApiExplorer Získá popisy rozhraní API, které poskytuje aplikace. Viz Vytvoření stránky nápovědy pro webové rozhraní API.
IAssembliesResolver Získá seznam sestavení pro aplikaci. Viz Výběr směrování a akce.
IBodyModelValidator Ověří model, který byl přečten z textu požadavku pomocí formátovače formátu média.
IContentNegotiator Provádí vyjednávání obsahu.
IDocumentationProvider Poskytuje dokumentaci pro rozhraní API. Výchozí hodnota je null. Viz Vytvoření stránky nápovědy pro webové rozhraní API.
IHostBufferPolicySelector Určuje, zda má hostitel ukládat do vyrovnávací paměti těla entit zpráv HTTP.
IHttpActionInvoker Vyvolá akci kontroleru. Viz Výběr směrování a akce.
IHttpActionSelector Vybere akci kontroleru. Viz Výběr směrování a akce.
IHttpControllerActivator Aktivuje kontroler. Viz Výběr směrování a akce.
IHttpControllerSelector Vybere kontroler. Viz Výběr směrování a akce.
IHttpControllerTypeResolver Poskytuje seznam typů kontroleru webového rozhraní API v aplikaci. Viz Výběr směrování a akce.
ITraceManager Inicializuje rámec trasování. Viz Trasování ve webovém rozhraní API ASP.NET.
ITraceWriter Poskytuje zapisovač trasování. Výchozí hodnota je zapisovač trasování bez operace (no-op). Viz Trasování ve webovém rozhraní API ASP.NET.
IModelValidatorCache Poskytuje mezipaměť validátorů modelů.

Služby s více instancemi

Service Description
IFilterProvider Vrátí seznam filtrů pro akci kontroleru.
ModelBinderProvider Vrátí pořadač modelu pro daný typ.
ModelMetadataProvider Poskytuje metadata pro model.
ModelValidatorProvider Poskytuje validátor pro model.
ValueProviderFactory Vytvoří zprostředkovatele hodnot. Další informace najdete v blogovém příspěvku Mika Stallova s názvem How to create a custom value provider in WebAPI

Pokud chcete do služby s více instancemi přidat vlastní implementaci, zavolejte přidat nebo vložit v kolekci Services :

config.Services.Add(typeof(IFilterProvider), new MyFilterProvider());

Chcete-li nahradit jednoinstanční službu vlastní implementací, zavolejte Replace v kolekci Services.

config.Services.Replace(typeof(ITraceWriter), new MyTraceWriter());

Konfigurace Per-Controller

Pro každý kontroler můžete přepsat následující nastavení:

  • Formátování typů médií
  • Pravidla vazby parametrů
  • Services

Chcete-li to provést, definujte vlastní atribut, který implementuje IControllerConfiguration rozhraní. Potom na kontroler použijte atribut.

Následující příklad nahrazuje výchozí formátovací moduly typu média vlastním formátovačem.

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...
    }
}

Metoda IControllerConfiguration.Initialize má dva parametry:

  • Objekt HttpControllerSettings
  • Objekt HttpControllerDescriptor

Popisovač HttpControllerDescriptor obsahuje popis kontroleru, který můžete prozkoumat pro informační účely (například pro rozlišení mezi dvěma kontrolery).

Ke konfiguraci kontroleru použijte objekt HttpControllerSettings . Tento objekt obsahuje podmnožinu parametrů konfigurace, které lze přepsat na základě konkrétního kontroléru zařízení. Všechna nastavení, která nezměníte, budou výchozí v globálním objektu HttpConfiguration.