При использовании следующих маршрутов:
config.Routes.MapHttpRoute(
name: "new_device",
routeTemplate: "api/v1/devices",
defaults: new { controller = "Devices", action = "new_device" }
);
config.Routes.MapHttpRoute(
name: "devices_list",
routeTemplate: "api/v1/devices",
defaults: new { controller = "Devices", action = "devices_list", httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
Контроллер выглядит следующим образом:
public class DevicesController : ApiController
{
[HttpPost]
[ResponseType(typeof(IHttpActionResult))]
[Route("api/v1/devices")]
[ActionName("new_device")]
[ValidateModel]
public IHttpActionResult NewDevice([System.Web.Http.FromBody] Device device )
{
...
}
[HttpGet]
[ResponseType(typeof(IHttpActionResult))]
[Route("api/v1/devices")]
[ActionName("devices_list")]
[ValidateModel]
public List<Device> GetAllDevices()
{
...
}
Я ожидаю, что маршрутизатор найдет правильный маршрут на основе используемого HttpMethodтак как даже он использует тот же URI, он использует другой HttpMethod.
Но вместо этого происходит сбой со следующим:
"Сообщение": "Запрошенный ресурс не поддерживает http-метод" GET "."
Я предполагаю, что он сопоставляет совпадение с URI, а затем проверяет, является ли метод одинаковым.
Есть ли способ добиться, используя тот же URI с другим методом Http, которыйкак руководствоваться REST?Я что-то упустил?