На основе документирования
Маршрутизация атрибута может сочетаться с маршрутизацией на основе соглашения.Чтобы определить основанные на соглашении маршруты, вызовите метод MapHttpRoute.
Я хочу, чтобы каждый маршрут начинался с api
.Например, я хочу, чтобы маршрут был http://localhost:40000/api/client/{id}/batch/approve
, поэтому вот мой класс WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Тогда в контроллере у меня есть
public class BatchController : ApiController
{
private readonly MyService _service;
public BatchController(MyService service)
{
_service = service;
}
[HttpPost]
[Route("client/{id}/batch/approve")]
public async Task<IHttpActionResult> Approve(int id, RequestDTO request)
{
return Ok(await _service.Approve(clientID,request).ConfigureAwait(false));
}
Когда клиент вызывает этот маршрут, он получает 404 Not Found
ответ.Однако, если я префикс api
в атрибуте Route, как показано ниже, это сработало
[Route("api/client/{id}/batch/approve")]
Почему маршрутизация на основе соглашения не префикс api
для маршрутизации, почему мне также необходимо явно добавить префикс api
в атрибут Route