Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
В процессе работы с Web API мы столкнемся с похожей структурой обработки запросов: контроллеры, контекст запроса, валидация модели, фильтры и т.д. Для всех этих процессов Web API предоставляет нам похожие классы, как в MVC. В то же время это будут совершенно другие классы, даже если они называются одинаково и выполняют ту же роль в системе.
Например, можно следующим образом сопоставить некоторые типы MVC и Web API:
Web API | MVC |
System.Web.Http.Controllers.IHttpController | System.Web.Mvc.IController |
System.Web.Http.ApiController | System.Web.Mvc.Controller |
System.Web.Http.Controllers.HttpRequestContext | System.Web.HttpContext |
System.Net.Http.HttpRequestMessage | System.Web.HttpRequest |
System.Net.Http.HttpResponseMessage | System.Web.HttpResponse |
В то же время эти типы не являются полными аналогами. И для большего удобства мы также в Web API 2 можем использовать классы из пространства имен System.Web.
Базовая функциональность Web API сосредоточена в следующих пространствах имен:
System.Net.Http : содержит типы, представляющие запросы и ответы HTTP
System.Web.Http : определяет большинство типов, используемых в Web API, в частности, класс контроллера ApiController
System.Net.Http.Formatting : определяет классы, управляющие сериализацией данных при отправке ответа пользователю
System.Web.Http.Controllers : содержит ряд типов, используемых классом ApiController
System.Web.Http.Dependencies : содержит классы, управляющие внедрением зависимостей
System.Web.Http.Dispatcher : включает типы, управляющие получением данных запроса от хостинговой платформы и передачей из обрабатывающему запрос контроллеру
System.Web.Http.Filters : содержит классы фильтров
System.Web.Http.Metadata : содержит классы, используемые при описании классов моделей с помощью метаданных
System.Web.Http.ModelBinding : классы из этого пространства имен ответственны за связывание данных из запроса с параметрами методов
System.Web.Http.Results : содержит классы, которые описывают результат методов, отправляемый клиенту
System.Web.Http.Routing : определяет классы, управляющие маршрутизацией в Web API
System.Web.Http.Validation : содержит классы, управляющие валидацией данных запроса клиента
System.Web.Http.ValueProviders : содержит ряд вспомогательных классов, например, поставщики значений, используемых для извлечения данных из запроса
Конфигурация приложения WebApi определяется в файле WebApiConfig.cs, который находится в проекте в папке App_Start. По умолчанию он содержит только описание маршрутов Web API, однако может содержать и другие настройки конфигурации:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
В методе Register
устанавливаются конфигурационные настройки Web API.
Вне зависимости от того, где развертывается приложение - на IIS, локально или в Windows Azure, точкой входа в приложение и его конфигурацию является класс приложения, определенный в файле Global.asax.cs:
public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); //...................................... } }
Класс System.Web.Http.GlobalConfiguration предоставляет точку входа для конфигурации приложения Web API и определяет следующие статические методы:
Configuration: хранит объект HttpConfiguration
, который представляет конфигурацию Web API
DefaultHandler: предоставляет объект HttpMessageHandler
, который используется по умолчанию для обработки запросов
Configure(callback): регистрирует метод callback
, который вызывается для конфигурации приложения.
По умолчанию (GlobalConfiguration.Configure(WebApiConfig.Register)
) вызывается метод Register класса WebApiConfig
HttpConfiguration
класс позволяет настроить конфигурацию с помощью следующих свойств:
DependencyResolver: используется для внедрения зависимостей
Filters: получает или устанавливает фильтры запроса
Formatters: хранит форматировщики медиа-типов, которые управляют сериализацией ответа клиенту
IncludeErrorDetailPolicy: указывает, надо ли включать в сообщения об ошибках детализованую информацию
MessageHandlers: хранит обработчики сообщений
ParameterBindingRules: возвращает набор правил, устанавливающих привязку между данными запроса и параметрами
Routes: возвращает набор маршрутов приложения
Services: возвращает все используемые Web Api сервисы
Все эти свойства образуют инфраструктуру Web API, используемую для обработки входящих запросов.