Udostępnij za pośrednictwem


Konfigurowanie ASP.NET internetowego interfejsu API 2

W tym temacie opisano sposób konfigurowania internetowego interfejsu API ASP.NET.

Ustawienia konfiguracji

Ustawienia konfiguracji internetowego interfejsu API są definiowane w klasie HttpConfiguration .

Członek Opis
DependencyResolver Włącza wstrzykiwanie zależności dla kontrolerów. Zobacz Using the Web API Dependency Resolver (Korzystanie z internetowego interfejsu API Dependency Resolver).
Filtry Filtry akcji.
Formatters Formatery typów multimediów.
IncludeErrorDetailPolicy Określa, czy serwer powinien zawierać szczegóły błędu, takie jak komunikaty o wyjątkach i ślady stosu, w komunikatach odpowiedzi HTTP. Zobacz IncludeErrorDetailPolicy.
Inicjatora Funkcja, która wykonuje finalną inicjację obiektu HttpConfiguration.
Programy obsługi komunikatów Programy obsługi komunikatów HTTP.
ParameterBindingRules Kolekcja reguł dotyczących parametrów powiązania w akcjach kontrolera.
Właściwości Ogólna torba właściwości.
Trasy Kolekcja tras. Zobacz Routing w ASP.NET internetowym interfejsie API.
Usługi Kolekcja usług. Zobacz Usługi.

Wymagania wstępne

Program Visual Studio 2017, wersja Community, Professional lub Enterprise.

Konfigurowanie internetowego interfejsu API przy użyciu hostingu ASP.NET

W aplikacji ASP.NET skonfiguruj internetowy interfejs API, wywołując metodę GlobalConfiguration.Configure w metodzie Application_Start . Metoda Configure przyjmuje delegata z pojedynczym parametrem typu HttpConfiguration. Wykonaj całą konfigurację wewnątrz delegata.

Oto przykład użycia anonimowego delegata:

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

W programie Visual Studio 2017 szablon projektu "aplikacja internetowa ASP.NET" automatycznie konfiguruje kod konfiguracji, jeśli wybierzesz pozycję "Internetowy interfejs API" w oknie dialogowym Nowy projekt ASP.NET .

Zrzut ekranu przedstawiający okno dialogowe Nowy projekt S P dot NET z zaznaczonym polem wyboru Web A P I w celu automatycznego skonfigurowania kodu konfiguracji.

Szablon projektu tworzy plik o nazwie WebApiConfig.cs w folderze App_Start. Ten plik kodu definiuje delegata, w którym należy umieścić kod konfiguracji internetowego interfejsu API.

Zrzut ekranu przedstawiający okno dialogowe Eksplorator rozwiązań z pozycją Web A P I Config dot c s na czerwono w folderze Start aplikacji.

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

Szablon projektu dodaje również kod wywołujący delegata z Application_Start.

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

Konfigurowanie internetowego interfejsu API przy użyciu interfejsu OWIN Self-Hosting

Jeśli korzystasz z własnego hostingu za pomocą interfejsu OWIN, utwórz nowe wystąpienie httpconfiguration . Wykonaj dowolną konfigurację w tym wystąpieniu, a następnie przekaż wystąpienie do metody rozszerzenia 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); 
    } 
}

Samouczek Używanie interfejsu OWIN do Self-Host ASP.NET internetowego interfejsu API 2 zawiera pełne kroki.

Globalne usługi internetowego interfejsu API

Kolekcja HttpConfiguration.Services zawiera zestaw usług globalnych używanych przez internetowy interfejs API do wykonywania różnych zadań, takich jak wybór kontrolera i negocjowanie zawartości.

Uwaga

Kolekcja usług nie jest mechanizmem ogólnego przeznaczenia na potrzeby odnajdywania usług lub wstrzykiwania zależności. Przechowuje tylko typy usług, które są znane strukturze internetowego interfejsu API.

Kolekcja Usług jest inicjowana przy użyciu domyślnego zestawu usług i można udostępniać własne implementacje niestandardowe. Niektóre usługi obsługują wiele wystąpień, a inne mogą mieć tylko jedno wystąpienie. (Można jednak również świadczyć usługi na poziomie kontrolera; zobacz Konfiguracja kontrolera.

usługi Single-Instance

Usługa Opis
IActionValueBinder Pobiera powiązanie dla parametru.
IApiExplorer Pobiera opisy interfejsów API uwidocznionych przez aplikację. Zobacz Tworzenie strony pomocy dla internetowego interfejsu API.
IAssembliesResolver Pobiera listę zestawów dla aplikacji. Zobacz Wybieranie routingu i akcji.
IBodyModelValidator Weryfikuje model odczytywany z treści żądania przez formater typu nośnika.
IContentNegotiator Wykonuje negocjacje zawartości.
IDocumentationProvider Zawiera dokumentację interfejsów API. Wartość domyślna to null. Zobacz Tworzenie strony pomocy dla internetowego interfejsu API.
IHostBufferPolicySelector Wskazuje, czy host powinien buforować treści jednostek komunikatów HTTP.
IHttpActionInvoker Wywołuje akcję kontrolera. Zobacz Wybieranie routingu i akcji.
IHttpActionSelector Wybiera akcję kontrolera. Zobacz Wybieranie routingu i akcji.
IHttpControllerActivator Aktywuje kontroler. Zobacz Wybieranie routingu i akcji.
IHttpControllerSelector Wybiera kontroler. Zobacz Wybieranie routingu i akcji.
IHttpControllerTypeResolver Zawiera listę typów kontrolera internetowego interfejsu API w aplikacji. Zobacz Wybieranie routingu i akcji.
ITraceManager Inicjuje strukturę śledzenia. Zobacz Śledzenie w interfejsie API sieci Web ASP.NET.
ITraceWriter Udostępnia moduł zapisywania śledzenia. Wartość domyślna to składnik zapisywania śladu "no-op". Zobacz Śledzenie w interfejsie API sieci Web ASP.NET.
IModelValidatorCache Udostępnia pamięć podręczną modułów sprawdzania poprawności modelu.

usługi Multiple-Instance

Usługa Opis
Ifilterprovider Zwraca listę filtrów dla akcji kontrolera.
ModelBinderProvider Zwraca powiązanie modelu dla danego typu.
ModelMetadataProvider Udostępnia metadane dla modelu.
ModelValidatorProvider Udostępnia moduł sprawdzania poprawności dla modelu.
ValueProviderFactory Tworzy dostawcę wartości. Aby uzyskać więcej informacji, zobacz wpis w blogu Mike Stall How to create a custom value provider in WebAPI (Jak utworzyć niestandardowego dostawcę wartości w interfejsie WebAPI)

Aby dodać implementację niestandardową do usługi z wieloma wystąpieniami, wywołaj metodę Dodaj lub Wstaw w kolekcji Usług :

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

Aby zastąpić usługę pojedynczego wystąpienia niestandardową implementacją, wywołaj metodę Replace w kolekcji Usługi :

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

konfiguracja Per-Controller

Następujące ustawienia można zastąpić dla poszczególnych kontrolerów:

  • Formatery typów multimediów
  • Reguły powiązań parametrów
  • Usługi

W tym celu zdefiniuj atrybut niestandardowy, który implementuje interfejs IControllerConfiguration . Następnie zastosuj atrybut do kontrolera.

Poniższy przykład zastępuje domyślne formatery typu nośnika niestandardowym.

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 przyjmuje dwa parametry:

  • Obiekt HttpControllerSettings
  • Obiekt HttpControllerDescriptor

Obiekt HttpControllerDescriptor zawiera opis kontrolera, który można zbadać w celach informacyjnych (np. w celu odróżnienia między dwoma kontrolerami).

Użyj obiektu HttpControllerSettings , aby skonfigurować kontroler. Ten obiekt zawiera podzbiór parametrów konfiguracji, które można zastąpić w oparciu o kontroler. Wszystkie ustawienia, które nie są zmieniane domyślnie na globalny obiekt HttpConfiguration .