Configuración de ASP.NET Web API 2
En este tema, se describe cómo configurar ASP.NET Web API.
- Opciones de configuración
- Configuración de Web API con hospedaje de ASP.NET
- Configuración de Web API con autohospedaje de OWIN
- Servicios de Web API globales
- Configuración por controlador
Opciones de configuración
Los valores de configuración de Web API se definen en la clase HttpConfiguration.
Miembro | Descripción |
---|---|
DependencyResolver | Habilita la inserción de dependencias para los controladores. Consulte Uso del solucionador de dependencias de Web API. |
Filters | Filtros de acciones. |
Formateadores | Formateadores de tipo multimedia. |
IncludeErrorDetailPolicy | Especifica si el servidor debe incluir detalles de error, como mensajes de excepción y seguimientos de pila, en mensajes de respuesta HTTP. Consulte IncludeErrorDetailPolicy. |
Inicializador | Función que realiza la inicialización final de HttpConfiguration. |
MessageHandlers | Controladores de mensajes HTTP. |
ParameterBindingRules | Colección de reglas para enlazar parámetros en las acciones del controlador. |
Propiedades | Contenedor de propiedades genérico. |
Rutas | Colección de rutas. Consulte Enrutamiento en ASP.NET Web API. |
Servicios | La colección de servicios. Consulte Servicios. |
Requisitos previos
Visual Studio 2017 Community, Professional o Enterprise.
Configuración de Web API con hospedaje de ASP.NET
En una aplicación ASP.NET, configure Web API llamando a GlobalConfiguration.Configure en el método Application_Start. El método Configure toma un delegado con un único parámetro de tipo HttpConfiguration. Realice toda la configuración dentro del delegado.
Este es un ejemplo mediante un delegado anónimo:
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 }
);
});
}
}
}
En Visual Studio 2017, la plantilla de proyecto "ASP.NET Web Application" configura automáticamente el código de configuración si selecciona "Web API" en el cuadro de diálogo Nuevo proyecto de ASP.NET.
La plantilla de proyecto crea un archivo denominado WebApiConfig.cs dentro de la carpeta App_Start. Este archivo de código define el delegado donde debe colocar el código de configuración de Web 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 }
);
}
}
}
La plantilla de proyecto también agrega el código que llama al delegado desde Application_Start.
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
Configuración de Web API con autohospedaje de OWIN
Si está usando el autohospedaje con OWIN, cree una nueva instancia de HttpConfiguration. Realice cualquier configuración en esta instancia y, a continuación, pase la instancia al método de extensión 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);
}
}
En el tutorial Uso de OWIN para autohospedar ASP.NET Web API 2, se muestran los pasos completos.
Servicios de Web API globales
La colección HttpConfiguration.Services contiene un conjunto de servicios globales que Web API usa para realizar diversas tareas, como la selección del controlador y la negociación de contenido.
Nota:
La colección Services no es un mecanismo de uso general para la detección de servicios o la inserción de dependencias. Solo almacena los tipos de servicio que se conocen en el marco de Web API.
La colección Services se inicializa con un conjunto predeterminado de servicios y puede proporcionar sus propias implementaciones personalizadas. Algunos servicios admiten varias instancias, mientras que otras solo pueden tener una instancia. (Sin embargo, también puede proporcionar servicios en el nivel de controlador; consulte Configuración por controlador.
Servicios de instancia única
Servicio | Descripción |
---|---|
IActionValueBinder | Obtiene un enlace para un parámetro. |
IApiExplorer | Obtiene descripciones de las API expuestas por la aplicación. Consulte Creación de una página de ayuda para una instancia de Web API. |
IAssembliesResolver | Obtiene una lista de los ensamblados de la aplicación. Consulte Selección de enrutamiento y acción. |
IBodyModelValidator | Valida un modelo que se lee desde el cuerpo de la solicitud mediante un formateador de tipo multimedia. |
IContentNegotiator | Realiza la negociación de contenido. |
IDocumentationProvider | Proporciona documentación para las API. El valor predeterminado es null. Consulte Creación de una página de ayuda para una instancia de Web API. |
IHostBufferPolicySelector | Indica si el host debe almacenar en búfer los cuerpos de entidad del mensaje HTTP. |
IHttpActionInvoker | Invoca una acción de controlador. Consulte Selección de enrutamiento y acción. |
IHttpActionSelector | Selecciona una acción de controlador. Consulte Selección de enrutamiento y acción. |
IHttpControllerActivator | Activa un control. Consulte Selección de enrutamiento y acción. |
IHttpControllerSelector | Selecciona un controlador. Consulte Selección de enrutamiento y acción. |
IHttpControllerTypeResolver | Proporciona una lista de los tipos de controlador de Web API de la aplicación. Consulte Selección de enrutamiento y acción. |
ITraceManager | Inicializa el marco de seguimiento. Consulte Seguimiento en ASP.NET Web API. |
ITraceWriter | Proporciona un escritor de seguimiento. El valor predeterminado es un escritor de seguimiento "sin operación". Consulte Seguimiento en ASP.NET Web API. |
IModelValidatorCache | Proporciona una memoria caché de validadores de modelos. |
Servicios de varias instancias
Servicio | Descripción |
---|---|
IFilterProvider | Devuelve una lista de filtros para una acción de controlador. |
ModelBinderProvider | Devuelve un enlazador de modelos para un tipo determinado. |
ModelMetadataProvider | Proporciona metadatos para un modelo. |
ModelValidatorProvider | Proporciona un validador para un modelo. |
ValueProviderFactory | Crea un proveedor de valores. Para más información, consulte la entrada de blog Cómo crear un proveedor de valores personalizados en WebAPI de Mike Stall |
Para agregar una implementación personalizada a un servicio de varias instancias, llame a Add o Insert en la colección Services:
config.Services.Add(typeof(IFilterProvider), new MyFilterProvider());
Para reemplazar un servicio de instancia única por una implementación personalizada, llame a Replace en la colección Services:
config.Services.Replace(typeof(ITraceWriter), new MyTraceWriter());
Configuración por controlador
Puede invalidar la siguiente configuración individual por controlador:
- Formateadores de tipo multimedia
- Reglas de enlace de parámetros
- Servicios
Para ello, defina un atributo personalizado que implemente la interfaz IControllerConfiguration. Después, aplique el atributo al controlador.
En el ejemplo siguiente, se reemplazan los formateadores de tipo multimedia predeterminados por un formateador personalizado.
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...
}
}
El método IControllerConfiguration.Initialize toma dos parámetros:
- Un objeto HttpControllerSettings
- Un objeto HttpControllerDescriptor
El HttpControllerDescriptor contiene una descripción del controlador, que puede examinar con fines informativos (por ejemplo, distinguir entre dos controladores).
Use el objeto HttpControllerSettings para configurar el controlador. Este objeto contiene el subconjunto de parámetros de configuración que se pueden invalidar por cada controlador individual. Cualquier configuración que no cambie se asigna de forma predeterminada al objeto global HttpConfiguration.