У меня есть объект с именем агентство со следующими APIsASP NET Web API шаблоны Route
GET http://localhost:37331/api/agency?start=1&limit=10&status=1
GET http://localhost:37331/api/agency/2
POST http://localhost:37331/api/agency
PUT http://localhost:37331/api/agency
DELETE http://localhost:37331/api/agency/4
POST http://localhost:37331/api/agency/activate/3
POST http://localhost:37331/api/agency/deactivate/3
GET http://localhost:37331/api/agency/types
Шаблоны маршрутов, которые я использовал в
config.Routes.MapHttpRoute(
name: "ControllerActionIdApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { },
constraints: new { id = @"\d+" }
);
//
config.Routes.MapHttpRoute(
name: "ControllerActionApi",
routeTemplate: "api/{controller}/{action}"
);
//
config.Routes.MapHttpRoute(
name: "ControllerIdApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { },
constraints: new { id = @"\d+" }
);
//
config.Routes.MapHttpRoute(
name: "ControllerApi",
routeTemplate: "api/{controller}"
);
Очевидно, что существует неоднозначное между 2-й и 3-й. У меня есть обходное решение, которое помещает идентификатор в строку запроса
GET http://localhost:37331/api/agency?id=2
DELETE http://localhost:37331/api/agency?id=4
Я думаю, что должен быть умный способ. Не могли бы вы предложить по этому поводу?
Благодаря
Какие из них дают вам ошибки? – AgnosticDev
URL 2 и 5. Спасибо –
Можете ли вы не просто поменять порядок своего 2-го и 3-го маршрутов? Они сопоставляются последовательно с вашими ограничениями: new {id = @ "\ d +"} на 3-м месте не получает внешний вид, потому что второй маршрут всегда будет выигрывать. –