У меня есть контроллер веб-API со следующими действиями:
[HttpPut]
public string Put(int id, JObject data)
[HttpPut, ActionName("Lock")]
public bool Lock(int id)
[HttpPut, ActionName("Unlock")]
public bool Unlock(int id)
И нанесены следующие маршруты:
routes.MapHttpRoute(
name: "Api",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ApiAction",
routeTemplate: "api/{controller}/{action}/{id}"
);
Когда я делаю следующие запросы, все работает так, как ожидалось:
PUT /api/items/Lock/5
PUT /api/items/Unlock/5
Но когда я пытаюсь сделать запрос на:
PUT /api/items/5
Я получаю следующее исключение:
Multiple actions were found that match the request:
Put(int id, JObject data)
Lock(int id)
Unlock(int id)
Я попытался добавить пустое имя действия к маршруту по умолчанию, но это не помогло:
[HttpPut, ActionName("")]
public string Put(int id, JObject data)
Любые идеи, как я могу объединить маршрутизацию RESTful по умолчанию с именами настраиваемых действий?
EDIT: Механизм маршрутизации не путается с выбором контроллера. Его смущает выбор action на одном контроллере. Что мне нужно, так это сопоставить действие по умолчанию, когда действие не указано. Надеюсь, что это проясняет ситуацию.