Konfigurowanie ASP.NET internetowego interfejsu API 2
W tym temacie opisano sposób konfigurowania internetowego interfejsu API ASP.NET.
- Ustawienia konfiguracji
- Konfigurowanie internetowego interfejsu API przy użyciu hostingu ASP.NET
- Konfigurowanie internetowego interfejsu API przy użyciu własnego hostingu OWIN
- Globalne usługi internetowego interfejsu API
- Konfiguracja poszczególnych kontrolerów
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 .
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.
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 .