Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe cómo configurar ASP.NET API web.
- Opciones de configuración
- Configuración de la API web con hospedaje de ASP.NET
- Configuración de la API web con autohospedaje de OWIN
- Servicios de API web globales
- Configuración dePer-Controller
Valores de configuración
Los valores de configuración de api web 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 API web. |
| Filtros | Filtros de acción. |
| Formateadores | Formateadores de tipo multimedia. |
| IncludeErrorDetailPolicy (Política de Inclusión de Detalles de Error) | Especifica si el servidor debe incluir detalles de error, como mensajes de excepción y seguimientos de pila, en mensajes de respuesta HTTP. Vea 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 | El conjunto de rutas. Consulte Enrutamiento en ASP.NET API web. |
| Servicios | La colección de servicios. Consulte Servicios. |
Prerrequisitos
Visual Studio 2017 Community, Professional o Enterprise Edition.
Configuración de la API web con hospedaje de ASP.NET
En una aplicación ASP.NET, configure la API web 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 aplicación web" configura automáticamente el código de configuración, si selecciona "API web" 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 la API web.
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 OWIN Self-Hosting
Si está autohospedando 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 Self-Host ASP.NET Web API 2 se muestran los pasos completos.
Servicios de API web globales
La colección HttpConfiguration.Services contiene un conjunto de servicios globales que la API web 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 api web.
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 a nivel de controlador; consulte Configuración por Controlador.
Servicios de Instancia Única
| Service | Descripción |
|---|---|
| IActionValueBinder | Obtiene una vinculación 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 API web. |
| 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 API web. |
| 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 controlador. 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 API web 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. Por defecto, se utiliza un "no-op" como registrador de trazas. Consulte Seguimiento en ASP.NET Web API. |
| IModelValidatorCache | Proporciona una memoria caché de validadores de modelos. |
servicios de Multiple-Instance
| Service | 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 obtener más información, consulte la entrada de blog de Mike Stall How to create a custom value provider in WebAPI (Cómo crear un proveedor de valores personalizados en WebAPI). |
Para agregar una implementación personalizada a un servicio de varias instancias, llame a Agregar o insertar 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 de Per-Controller
Puede invalidar la siguiente configuración por controlador:
- Formateadores de tipo multimedia
- Reglas de enlace de parámetros
- Servicios
Para ello, defina un atributo personalizado que implemente la interfaz IControllerConfiguration . A continuación, 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:
- Objeto HttpControllerSettings
- Objeto HttpControllerDescriptor
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 controlador. Cualquier configuración que no cambie predeterminadamente se aplicará al objeto global HttpConfiguration.