Freigeben über


Konfigurieren ASP.NET Web-API 2

In diesem Thema wird beschrieben, wie Sie ASP.NET Web-API konfigurieren.

Konfigurationseinstellungen

Web-API-Konfigurationseinstellungen werden in der HttpConfiguration-Klasse definiert.

Mitglied Beschreibung
DependencyResolver Aktiviert die Abhängigkeitseinfügung für Controller. Siehe Verwenden des Web-API-Abhängigkeitslösers.
Filter Aktionsfilter.
Formatierer Formatierer für Medientypen.
IncludeErrorDetailPolicy Gibt an, ob der Server Fehlerdetails, wie Ausnahmemeldungen und Stack-Traces, in HTTP-Antwortnachrichten einfügen soll. Siehe IncludeErrorDetailPolicy.
Initialisierer Eine Funktion, die die endgültige Initialisierung der HttpConfiguration durchführt.
MessageHandlers HTTP-Nachrichtenhandler.
ParameterBindingRules Eine Sammlung von Regeln für Bindungsparameter für Controlleraktionen.
Eigenschaften Ein generischer Eigenschaftenbehälter.
Routes Die Sammlung von Routen. Siehe Routing in ASP.NET Web-API.
Dienste Die Sammlung von Diensten. Siehe Dienste.

Voraussetzungen

Visual Studio 2017 Community-, Professional- oder Enterprise-Edition.

Konfigurieren der Web-API mit ASP.NET Hosting

Konfigurieren Sie in einer ASP.NET-Anwendung die Web-API, indem Sie "GlobalConfiguration.Configure" in der Application_Start-Methode aufrufen. Die Configure-Methode akzeptiert einen Delegaten mit einem einzelnen Parameter vom Typ "HttpConfiguration". Führen Sie alle Ihre Konfigurationen innerhalb des Delegaten aus.

Hier ist ein Beispiel für die Verwendung eines anonymen Delegaten:

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

In Visual Studio 2017 richtet die Projektvorlage "ASP.NET Webanwendung" automatisch den Konfigurationscode ein, wenn Sie im Dialogfeld " Neues ASP.NET Projekt " die Option "Web-API" auswählen.

Screenshot des Dialogfelds

Die Projektvorlage erstellt eine Datei namens WebApiConfig.cs innerhalb des ordners App_Start. Diese Codedatei definiert den Delegat, an dem Sie den Web-API-Konfigurationscode platzieren sollten.

Screenshot des Dialogfelds

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

Die Projektvorlage fügt auch den Code hinzu, der den Delegat aus Application_Start aufruft.

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

Konfigurieren der Web-API mit OWIN-Self-Hosting

Wenn Sie selbst mit OWIN gehostet werden, erstellen Sie eine neue HttpConfiguration-Instanz . Führen Sie eine konfiguration für diese Instanz aus, und übergeben Sie die Instanz dann an die Owin.UseWebApi-Erweiterungsmethode .

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

Das Lernprogramm Verwenden von OWIN zur Selbst-Hosting von ASP.NET Web-API 2 zeigt die vollständigen Schritte.

Globale Web-API-Dienste

Die HttpConfiguration.Services -Auflistung enthält eine Reihe globaler Dienste, die Web-API verwendet, um verschiedene Aufgaben auszuführen, z. B. Controllerauswahl und Inhaltsaushandlung.

Hinweis

Die Services-Auflistung ist kein allgemeiner Mechanismus für die Dienstermittlung oder Abhängigkeitsinjektion. Es speichert nur Diensttypen, die dem Web-API-Framework bekannt sind.

Die Services-Auflistung wird mit einem Standardsatz von Diensten initialisiert, und Sie können Eigene benutzerdefinierte Implementierungen bereitstellen. Einige Dienste unterstützen mehrere Instanzen, während andere nur eine Instanz haben können. (Sie können jedoch auch Dienste auf Controllerebene bereitstellen; siehe Per-Controller Konfiguration.

Single-Instance-Dienste

Service Beschreibung
IActionValueBinder Ruft eine Bindung für einen Parameter ab.
IApiExplorer Ruft Beschreibungen der APIs ab, die von der Anwendung verfügbar gemacht werden. Siehe Erstellen einer Hilfeseite für eine Web-API.
IAssembliesResolver Ruft eine Liste der Assemblys für die Anwendung ab. Siehe Routing- und Aktionsauswahl.
IBodyModelValidator Überprüft ein Modell, das vom Anforderungstextkörper von einem Medientyp-Formatter gelesen wird.
IContentNegotiator Führt Inhaltsaushandlung aus.
IDocumentationProvider Stellt Dokumentation für APIs bereit. Der Standardwert ist NULL. Siehe Erstellen einer Hilfeseite für eine Web-API.
IHostBufferPolicySelector Gibt an, ob der Host HTTP-Nachrichtenentitätstexte puffern soll.
IHttpActionInvoker Ruft eine Controlleraktion auf. Siehe Routing- und Aktionsauswahl.
IHttpActionSelector Wählt eine Controlleraktion aus. Siehe Routing- und Aktionsauswahl.
IHttpControllerActivator Aktiviert einen Controller. Siehe Routing- und Aktionsauswahl.
IHttpControllerSelector Wählt einen Controller aus. Siehe Routing- und Aktionsauswahl.
IHttpControllerTypeResolver Stellt eine Liste der Web-API-Controllertypen in der Anwendung bereit. Siehe Routing- und Aktionsauswahl.
ITraceManager Initialisiert das Ablaufverfolgungs-Framework. Siehe Ablaufverfolgung in ASP.NET Web-API.
ITraceWriter Stellt einen Ablaufverfolgungsschreiber bereit. Der Standardwert ist ein "no-op" Trace Writer. Siehe Ablaufverfolgung in der ASP.NET-Web-API.
IModelValidatorCache Stellt einen Cache von Modellprüfern bereit.

Multiple-Instance-Dienste

Service Beschreibung
IFilterProvider Gibt eine Liste der Filter für eine Controlleraktion zurück.
ModelBinderProvider Gibt einen Modellordner für einen bestimmten Typ zurück.
ModelMetadataProvider Stellt Metadaten für ein Modell bereit.
ModelValidatorProvider Stellt einen Validator für ein Modell bereit.
ValueProviderFactory Erstellt einen Wertanbieter. Weitere Informationen finden Sie im Blogbeitrag von Mike Stall : Erstellen eines benutzerdefinierten Wertanbieters in WebAPI

Um einer Multi-Instanz-Dienst eine benutzerdefinierte Implementierung hinzuzufügen, nutzen Sie Add oder Insert in der Services-Sammlung:

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

Um einen Service mit einer einzelnen Instanz durch eine benutzerdefinierte Implementierung zu ersetzen, rufen Sie Replace für die Services Collection auf.

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

Per-Controller-Konfiguration

Sie können die folgenden Einstellungen pro Controller außer Kraft setzen:

  • Medientyp-Formatierer
  • Parameterbindungsregeln
  • Dienste

Definieren Sie dazu ein benutzerdefiniertes Attribut, das die IControllerConfiguration-Schnittstelle implementiert. Wenden Sie dann das Attribut auf den Controller an.

Im folgenden Beispiel werden die Standardformatierer für Medientypen durch einen benutzerdefinierten Formatierer ersetzt.

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

Die IControllerConfiguration.Initialize-Methode verwendet zwei Parameter:

  • Ein HttpControllerSettings-Objekt
  • Ein HttpControllerDescriptor-Objekt

Der HttpControllerDescriptor enthält eine Beschreibung des Controllers, den Sie zu Informationszwecken untersuchen können (z. B. zur Unterscheidung zwischen zwei Controllern).

Verwenden Sie das HttpControllerSettings-Objekt , um den Controller zu konfigurieren. Dieses Objekt enthält die Teilmenge der Konfigurationsparameter, die Sie pro Controller außer Kraft setzen können. Alle Einstellungen, die Sie nicht ändern, verwenden die Standardeinstellung des globalen HttpConfiguration-Objekts.