При использовании страницы справки веб-API ASP.NET и связанного MVC.ApiExplorer у меня есть действительные маршруты, доступные через http, но не обнаруженные ApiExplorer. Эти маршруты обнаруживаются только при использовании общего правила маршрутизации. Использование более конкретного правила (в сочетании с общим) скрывает маршруты от ApiExplorer.
В примере с тремя правилами два маршрута относятся к действиям GET и POST в методе контроллера, которые не принимают никаких параметров запроса и идут MIA.
public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}
При использовании правила маршрутизации
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Маршруты обнаруживаются соответствующим образом Api Explorer как
- СООБЩЕНИЕ: API/SomeController
- ПОЛУЧИТЬ: API/SomeController
- ПОЛУЧИТЬ: api/SomeController/{id}
но при добавлении менее общего и более значимого правила
routes.MapHttpRoute(
name: "ApiSomeControllerDefault",
routeTemplate: "api/somecontroller/{id}",
defaults: new
{
controller = "SomeController",
id = RouteParameter.Optional
}
);
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
API Explorer возвращает только
- ПОЛУЧИТЬ: api/somecontroller/{id}
Почему некоторые из моих маршрутов не могут быть найдены?
ИЗМЕНИТЬ Ссылка выпустить отчет на странице проекта ApiExplorer