Настройка веб-API ASP.NET 2

В этом разделе описывается настройка веб-API ASP.NET.

Параметры конфигурации

Параметры конфигурации веб-API определяются в классе HttpConfiguration .

Член Описание
DependencyResolver Включает внедрение зависимостей для контроллеров. См. раздел "Использование сопоставителя зависимостей веб-API".
Фильтры Фильтры действий.
Форматировщики Средства форматирования типов мультимедиа.
IncludeErrorDetailPolicy Указывает, должен ли сервер включать сведения об ошибках, такие как сообщения об исключениях и трассировки стека, в сообщениях ответа HTTP. См. IncludeErrorDetailPolicy.
Инициализатор Функция, которая выполняет окончательную инициализацию httpConfiguration.
MessageHandlers Обработчики сообщений HTTP.
ParameterBindingRules Коллекция правил для привязки параметров действий контроллера.
Свойства Общий набор свойств.
Маршруты Набор маршрутов. См. статью "Маршрутизация" в веб-API ASP.NET.
Сервисы; Набор услуг. См. статью "Службы".

Необходимые условия

Visual Studio 2017 Выпуск Community, Professional или Enterprise.

Настройка веб-API с помощью размещения ASP.NET

В приложении ASP.NET настройте веб-API путем вызова GlobalConfiguration.Configure в методе Application_Start . Метод Configure принимает делегат с одним параметром типа HttpConfiguration. Выполните всю конфигурацию внутри делегата.

Ниже приведен пример использования анонимного делегата:

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

В Visual Studio 2017 шаблон проекта "ASP.NET веб-приложение" автоматически настраивает код конфигурации, если выбрать веб-API в диалоговом окне "Новый ASP.NET проект ".

Снимок экрана диалогового окна

Шаблон проекта создает файл с именем WebApiConfig.cs в папке App_Start. Этот файл кода определяет делегат, в который нужно внедрить код конфигурации Web API.

Снимок экрана диалогового окна обозревателя решений с файлом WebApiConfig.cs, выделенным красным цветом, внутри папки 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 }
            );
        }
    }
}

Шаблон проекта также добавляет код, вызывающий делегат из Application_Start.

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

Настройка веб-API с помощью OWIN Self-Hosting

При самостоятельном размещении с помощью OWIN создайте новый экземпляр HttpConfiguration . Выполните любую конфигурацию этого экземпляра, а затем передайте экземпляр в метод расширения 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); 
    } 
}

Руководство использования OWIN для самостоятельного хостинга ASP.NET Web API 2 показывает все шаги.

Глобальные веб-API-службы

Коллекция HttpConfiguration.Services содержит набор глобальных служб, которые веб-API использует для выполнения различных задач, таких как выбор контроллера и согласование содержимого.

Замечание

Коллекция служб не является механизмом общего назначения для обнаружения служб или внедрения зависимостей. Он хранит только типы служб, известные платформе веб-API.

Коллекция служб инициализирована с набором служб по умолчанию, и вы можете предоставить собственные пользовательские реализации. Некоторые службы поддерживают несколько экземпляров, а другие могут иметь только один экземпляр. (Однако вы также можете предоставлять службы на уровне контроллера; см. Конфигурация для каждого контроллера.

службы Single-Instance

Услуга Описание
IActionValueBinder Возвращает привязку для параметра.
IApiExplorer Возвращает описания API, предоставляемых приложением. См . статью "Создание страницы справки" для веб-API.
IAssembliesResolver Возвращает список сборок для приложения. См. раздел "Маршрутизация" и "Выбор действия".
IBodyModelValidator Проверяет модель, считываемую из текста запроса с помощью средства форматирования типа мультимедиа.
IContentNegotiator Выполняет согласование содержимого.
IDocumentationProvider Предоставляет документацию по API. Значение по умолчанию равно NULL. См . статью "Создание страницы справки" для веб-API.
IHostBufferPolicySelector Указывает, должен ли хост буферировать тела сущностей HTTP-сообщения.
IHttpActionInvoker Вызывает действие контроллера. См. раздел "Маршрутизация" и "Выбор действия".
IHttpActionSelector Выбирает действие контроллера. См. раздел "Маршрутизация" и "Выбор действия".
IHttpControllerActivator Активирует контроллер. См. раздел "Маршрутизация" и "Выбор действия".
IHttpControllerSelector Выбирает контроллер. См. раздел "Маршрутизация" и "Выбор действия".
IHttpControllerTypeResolver Содержит список типов контроллеров веб-API в приложении. См. раздел "Маршрутизация" и "Выбор действия".
ITraceManager Инициализирует фреймворк трассировки. См. Трассировка в ASP.NET Web API.
ITraceWriter Предоставляет средство записи трассировки. По умолчанию используется модуль записи трассировки "без операций". См. статью "Трассировка" в веб-API ASP.NET.
IModelValidatorCache Предоставляет кэш валидаторов моделей.

службы Multiple-Instance

Услуга Описание
IFilterProvider Возвращает список фильтров для действия контроллера.
ModelBinderProvider Возвращает модельный привязчик для заданного типа.
ModelMetadataProvider Предоставляет метаданные для модели.
ModelValidatorProvider Предоставляет валидатор для модели.
ValueProviderFactory Создает поставщика значений. Дополнительные сведения см. в записи блога Майка Стойла о создании поставщика настраиваемых значений в WebAPI

Чтобы добавить пользовательскую реализацию в службу с несколькими экземплярами, вызовите Add или Insert в коллекции Services:

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

Чтобы заменить одиночный экземпляр службы на пользовательскую реализацию, вызовите Replace в коллекции Services :

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

Конфигурация для каждого контроллера

Для каждого контроллера можно переопределить следующие параметры:

  • Средства форматирования типов мультимедиа
  • Правила привязки параметров
  • Services

Для этого определите пользовательский атрибут, реализующий интерфейс IControllerConfiguration . Затем примените атрибут к контроллеру.

В следующем примере заменяются средства форматирования типов мультимедиа по умолчанию настраиваемым форматировщиком.

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

Метод IControllerConfiguration.Initialize принимает два параметра:

  • Объект HttpControllerSettings
  • Объект HttpControllerDescriptor

HttpControllerDescriptor содержит описание контроллера, который можно изучить для информационных целей (например, чтобы различать два контроллера).

Используйте объект HttpControllerSettings для настройки контроллера. Этот объект содержит подмножество параметров конфигурации, которые можно переопределить для каждого контроллера отдельно. Любые параметры, которые вы не изменяете, по умолчанию применяются к глобальному объекту HttpConfiguration.