2016-07-05 2 views
2

Почему это не работает? Я получаю сообщение об ошибке: 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

+1

методы имеют одинаковую сигнатуру и тот же маршрут, который является причиной проблемы. Либо измените подпись своего метода, либо маршрут. Это также не помешает вам использовать правильное название ваших контроллеров. – hbulens

+0

Ваш маршрут не основан на контроллере – brykneval

+0

ASP.NET MVC позволит вам иметь два действия с тем же именем, но не с той же подписью, посмотрите на этот ответ http://stackoverflow.com/questions/9552761/ get-and-post-methods-with-the-same-action-name-in-the-same-controller – user65439

ответ

0

Внимательно прочитайте эту ошибку, затем посмотрите на маршрутизацию атрибутов. У вас одинаковые URL-адреса для двух разных действий. Программа не имеет понятия, какое действие выполнить.

+2

Это не так. Один из них - GET и второй PUT. Маршрутизатор должен различать такую ​​очевидную разницу, разве вы не думаете? – Pujubuju

0

использовать вместо [FromUri] [FromRoute] аннотаций

Смежные вопросы