Поддерживающие области в веб-API URL-
Вы просто должны зарегистрируйте маршрут веб-API.
Но этот маршрут должен быть зарегистрирован перед другими маршрутами. Если нет, запросы к API-интерфейсу API будут ошибочно обработаны, как если бы они были действием MVC.
Когда вы используете области, вы должны принять во внимание, что регистрация для маршрутов областей обычно выполняется до регистрации маршрутов без зоны. Я.е, в Global.asax Application_Start
у вас есть эти строки кода, в следующем порядке:
AreaRegistration.RegisterAllAreas();
// ...
RouteConfig.RegisterRoutes(RouteTable.Routes);
Первый вызов метода будет вызывать RegisterArea
метод каждый нашел xxxAreaRegistration
класс. И, в этой конфигурации вы, как правило, что-то вроде этого:
context.MapRoute(
"AreaName_default",
"AreaName/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
Если вы хотите иметь контроллеры Web API в этой области, необходимо добавить маршрут Web API перед этим, как так:
context.Routes.MapHttpRoute("AreaName_WebApiRoute",
"AreaName/Api/{controller}/{id}",
new { id = RouteParameter.Optional });
В этом случае я предполагаю, что вы хотите вызывать свои контроллеры API с помощью URL-адреса, например: /AreaName/Api/ControllerName/Id
.
Обычно я храню контроллеры Web API внутри папки Api
внутри папки области, но неважно, где вы их помещаете. Учтите, что контроллеры API будут найдены везде, где бы они ни находились, и если вы используете одно и то же имя для них в разных областях, вы получите конфликты: они найдены по имени класса, а не по полному (именному) имя.
В нескольких словах: нет реальной поддержки для областей, но вы можете включить их в свои собственные папки внутри областей и сделать их доступными по URL-адресам, которые выглядят как те из контроллеров MVC внутри областей.
Поддержка маршрутные пространств имен
Что делать, если вы хотите иметь контроллеры Web API с тем же именем в разных областях? Если вы действительно хотите оказать реальную поддержку областям веб-API-контроллерам, вам необходимо реализовать и зарегистрировать пользовательский номер IHttpControllerSelector.
У вас есть хорошее объяснение, и пример реализации здесь: ASP.NET Web API: Using Namespaces to Version Web APIs
Этот пример использует пространство имен для управления версиями, но код может быть несколько модифицирована для поддержки площади пространств имен.
Спасибо. Оказывается, что ничто мое не работало, потому что я зарегистрировал my/api/route после маршрута по умолчанию, который захватывал все вызовы api. –
Могу ли я иметь 2 Global.asax как для WebAPI, так и для сайта asp.net 4? – Cris
Помогите, вы сделали мой день! Большое спасибо. – Rikki