Вопрос касается определения пользовательских маршрутов с помощью атрибута Route
.Web API 2 routing - атрибут маршрута
Я знаю, что в WebApiConfig
классе вы всегда определить маршрут по умолчанию,
configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
То, что я не могу работать, когда я хочу передать другой параметр. Я знаю, что могу сделать это (ниже код определен под маршрутом по умолчанию, перечисленных выше):
//configuration.Routes.MapHttpRoute(
// name: "GetBrandImagePaths",
// routeTemplate: "api/{controller}/{id}/{type}");
Но я предпочел бы, вместо того, чтобы определить все эти маршруты в файле WebApiConfig
, используйте пользовательскую маршрутизацию. Однако, если у меня нет прокомментированного выше кода в файле, я получаю 404. Там, ведущий меня, верит, что пользовательский Route
даже не смотрит.
public class HelperApiController : ApiController
{
[HttpGet]
[Route("api/helperapi/{id}/{type}")]
public string GetBrandImages(int id, string type)
{
.....
}
}
Как я могу это так, я могу использовать маршруты, определенные в файле WebApiConfig
, и определение пользовательских маршрутов внутри отдельных контроллеров API.
Обратите внимание, что этот проект также является проектом MVC (а не только WebApi). Есть что-то, чего я не вижу, неправильно и т. Д.? Я знаю, что существует множество сообщений, в которых описано, как передавать несколько параметров, но я думаю, что мой вопрос немного более конкретен в отношении того, почему он работает, а не другой.
Так, если добавить, что вызов, делает это испортит другие маршруты по умолчанию? (результаты действия и т. д.)? Можно ли с уверенностью сказать, что использование 'config.MapHttpAttrubteRoutes()' предназначено только для прямых проектов WebApi? –
Нет, он не перезаписывает маршруты, которые вы вводите вручную. Однако не украшайте эти классы «Controller» любыми атрибутами маршрутизации, иначе вы получите дублирующие и потенциально конфликтующие маршруты. Я только использовал атрибуты маршрутизации для проектов WebApi, поэтому не могу комментировать их соответствие с MVC. – toadflakz
Так что, если я не украшу какие-либо другие контроллеры (не-Api) с 'Route' или' RoutePrefix', они все равно отправятся на правильные конечные точки? –