Condividi tramite


Configurazione dell'API Web ASP.NET 2

Questo argomento descrive come configurare ASP.NET'API Web.

Impostazioni di configurazione

Le impostazioni di configurazione dell'API Web sono definite nella classe HttpConfiguration .

Membro Descrizione
DependencyResolver Abilita l'inserimento delle dipendenze per i controller. Vedere Uso del sistema di risoluzione delle dipendenze dell'API Web.
Filtri Filtri d'azione.
Formattatori Formattatori di tipo multimediale.
IncludeErrorDetailPolicy Specifica se il server deve includere i dettagli dell'errore, ad esempio messaggi di eccezione e analisi dello stack, nei messaggi di risposta HTTP. Vedere IncludeErrorDetailPolicy.
Inizializzatore Funzione che esegue l'inizializzazione finale di HttpConfiguration.
MessageHandlers Gestori di messaggi HTTP.
ParameterBindingRules Raccolta di regole per l'associazione di parametri nelle azioni del controller.
Proprietà Contenitore di proprietà generico.
Percorsi Raccolta di percorsi. Consulta Routing in ASP.NET Web API.
Servizi Raccolta di servizi. Vedere Servizi.

Prerequisiti

Visual Studio 2017 Community, Professional o Enterprise Edition.

Configurazione dell'API Web con hosting ASP.NET

In un'applicazione ASP.NET configurare l'API Web chiamando GlobalConfiguration.Configure nel metodo Application_Start . Il metodo Configure accetta un delegato con un singolo parametro di tipo HttpConfiguration. Esegui la configurazione completa all'interno del delegato.

Di seguito è riportato un esempio di uso di un delegato anonimo:

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 il modello di progetto "applicazione Web ASP.NET" configura automaticamente il codice di configurazione, se si seleziona "API Web" nella finestra di dialogo Nuovo progetto ASP.NET .

Screenshot della finestra di dialogo Nuovo progetto ASP.NET con la casella di controllo Web API selezionata per impostare automaticamente il codice di configurazione del progetto.

Il modello di progetto crea un file denominato WebApiConfig.cs all'interno della cartella App_Start. Questo file di codice definisce il delegato in cui inserire il codice di configurazione dell'API Web.

Screenshot della finestra di dialogo Esplora soluzioni con Web API Config.cs evidenziato in rosso, all'interno della cartella 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 }
            );
        }
    }
}

Il modello di progetto aggiunge anche il codice che chiama il delegato da Application_Start.

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

Configurazione dell'API Web con OWIN Self-Hosting

Se esegui l'hosting autonomo con OWIN, crea una nuova istanza HttpConfiguration. Eseguire qualsiasi configurazione in questa istanza e quindi passare l'istanza al metodo di estensione 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); 
    } 
}

L'esercitazione Usare OWIN per Self-Host ASP.NET'API Web 2 illustra i passaggi completi.

Servizi API Web globali

La raccolta HttpConfiguration.Services contiene un set di servizi globali usati dall'API Web per eseguire varie attività, ad esempio la selezione del controller e la negoziazione del contenuto.

Annotazioni

La raccolta Services non è un meccanismo generico per l'individuazione dei servizi o l'iniezione di dipendenze. Archivia solo i tipi di servizio noti al framework API Web.

La raccolta Services viene inizializzata con un set predefinito di servizi ed è possibile fornire implementazioni personalizzate. Alcuni servizi supportano più istanze, mentre altre possono avere una sola istanza. Tuttavia, è anche possibile fornire servizi a livello di controller; vedere Configurazione per controller.

Servizi a Istanza Unica

Service Descrizione
IActionValueBinder Ottiene un'associazione per un parametro.
IApiExplorer Ottiene le descrizioni delle API esposte dall'applicazione. Vedere Creazione di una pagina della Guida per un'API Web.
IAssembliesResolver Ottiene un elenco degli assembly per l'applicazione. Vedi Routing e selezione di azioni.
IBodyModelValidator Convalida un modello letto dal corpo della richiesta da un formattatore di tipo multimediale.
IContentNegotiator Esegue la negoziazione del contenuto.
IDocumentationProvider Fornisce la documentazione per le API. Il valore predefinito è Null. Vedere Creazione di una pagina della Guida per un'API Web.
IHostBufferPolicySelector Indica se l'host deve bufferizzare i corpi del messaggio dell'entità HTTP.
IHttpActionInvoker Richiama un'azione del controller. Vedere Routing e selezione delle azioni.
IHttpActionSelector Seleziona un'azione del controller. Consulta Routing e Selezione di Azioni.
IHttpControllerActivator Attiva un controller. Consulta Routing e selezione di azioni.
IHttpControllerSelector Seleziona un controller. Vedere Routing e selezione di azioni.
IHttpControllerTypeResolver Fornisce un elenco dei tipi di controller API Web nell'applicazione. Consultare Instradamento e selezione di azioni.
ITraceManager Inizializza il framework di tracciamento. Vedi Tracciamento nell'ASP.NET Web API.
Itracewriter Fornisce uno scrittore di traccia. Il valore predefinito è "no-op" trace writer. Consultare Tracciare in ASP.NET Web API.
IModelValidatorCache Fornisce una cache di validatori del modello.

Servizi Multi-Istanza

Service Descrizione
Ifilterprovider Restituisce un elenco di filtri per un'azione del controller.
ModelBinderProvider Restituisce un binder di modello per un tipo specifico.
Modelmetadataprovider Fornisce metadati per un modello.
ModelValidatorProvider Fornisce un validator per un modello.
ValueProviderFactory Crea un provider di valori. Per altre informazioni, vedere il post di blog di Mike Stall Come creare un provider di valori personalizzato in WebAPI

Per aggiungere un'implementazione personalizzata a un servizio a istanze multipla, chiamare Aggiungi o Inserisci nella raccolta Services :

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

Per sostituire un servizio a istanza singola con un'implementazione personalizzata, chiamare Replace nella raccolta Services :

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

Configurazione di Per-Controller

È possibile eseguire l'override delle impostazioni seguenti in base al controller:

  • Formattatori di tipo multimediale
  • Regole di associazione dei parametri
  • Servizi

A tale scopo, definire un attributo personalizzato che implementa l'interfaccia IControllerConfiguration . Applicare quindi l'attributo al controller.

L'esempio seguente sostituisce i formattatori di tipo multimediale predefiniti con un formattatore personalizzato.

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

Il metodo IControllerConfiguration.Initialize accetta due parametri:

  • HttpControllerSettings oggetto
  • Oggetto HttpControllerDescriptor

HttpControllerDescriptor contiene una descrizione del controller, che è possibile esaminare per scopi informativi, ad esempio per distinguere tra due controller.

Utilizzare l'oggetto HttpControllerSettings per configurare il controller. Questo oggetto contiene il subset di parametri di configurazione di cui è possibile eseguire l'override in base al controller. Qualsiasi impostazione che non modifichi utilizzerà, per impostazione predefinita, l'oggetto HttpConfiguration globale.