Почему это не работает? Я получаю сообщение об ошибке: System.InvalidOperationException: Было найдено несколько типов контроллеров, соответствующих URL. Это может произойти, если маршруты атрибутов на нескольких контроллерах соответствуют запрошенному URL.Несколько типов контроллеров были обнаружены в C# web api 2.0
public class ConfigUpdateController: ApiController
{
[HttpPut]
[Route("api/device/{serial}/config")]
public IHttpActionResult Update(
[FromUri] string serial,
[FromBody] Configuration configuration)
{
}
}
public class ConfigQueryController: ApiController
{
[HttpGet]
[Route("api/device/{serial}/config")]
public IHttpActionResult Get(
[FromUri] string serial)
{
}
}
Причина, почему я хочу иметь методы те же ресурс в отдельных контроллерах развязки запросов от команд.
EDIT
Чтобы быть честным, это достаточно кода, чтобы проиллюстрировать мою проблему, так что просьба не беспокоить комментирующие контроллеры имен ЭСТ. Это не важно в контексте моего вопроса.
EDIT 2
Я нашел здесь web-api overview Тхет маршрутизация имеет 3 фазы:
Routing has three main phases: Matching the URI to a route template. Selecting a controller. Selecting an action.
Так что, похоже, это не работает, потому что контроллер не может быть разрешен и метод глагола (PUT, GET) даже не проверены? O_o
методы имеют одинаковую сигнатуру и тот же маршрут, который является причиной проблемы. Либо измените подпись своего метода, либо маршрут. Это также не помешает вам использовать правильное название ваших контроллеров. – hbulens
Ваш маршрут не основан на контроллере – brykneval
ASP.NET MVC позволит вам иметь два действия с тем же именем, но не с той же подписью, посмотрите на этот ответ http://stackoverflow.com/questions/9552761/ get-and-post-methods-with-the-same-action-name-in-the-same-controller – user65439