2013-07-10 2 views
0

Я знаю, что была тонна этих вопросов, но я не могу понять, почему я получаю «Было найдено несколько действий, которые соответствуют запросу:» при вызове действия PostEmailTemplate. Эти методы действий:ошибка веб-api route - найдено несколько действий

(удален старый код)

Update 2: я удалил все методы, установить маршрут обратно только маршрут по умолчанию, и оставил интерфейс контроллера по умолчанию. 2 'get' методы работают, но Post все еще дает эту ошибку. Это теперь контроллер:

public EmailTemplateModel Get(int id) 
    public List<EmailTemplateName> Get() 
    public void Post([FromBody]EmailTemplateModel data) 

и это единственный путь:

  RouteTable.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = System.Web.Http.RouteParameter.Optional } 
      ); 

ответ

2

Я выброшенные быстрый проект, чтобы проверить вашу конфигурацию, хотя я был совершенно уверен, что вы внедрили его правильно. Все работает так, как должно быть в моем проекте, я могу отправить сообщение на контроллер и получить правильные ответы и т. Д.

Вы уверены, что вы правильно отправили заявку? Потому что http://<host>:<port>/api/<controller> должен быть адресом, на который вы отправляете POST. Никаких дополнительных действий в URI не требуется, поскольку существует только один метод POST. Структура должна забрать метод и использовать его автоматически. Очевидно, что ошибка «множественных действий» возникает только тогда, когда на самом деле существуют два или более метода POST.

Последнее решение, которое вы можете попробовать, - прямо указать, к какому типу запроса принадлежит метод. Это можно сделать, добавив атрибуты [HttpGet], [HttpPost], [HttpDelete] и т. Д. К этому конкретному методу. Поэтому в вашем случае добавьте [HttpGet] как для методов GET, так и для [HttpPost] в метод POSt. Мне любопытно, будет ли это работать в этом случае.

+0

Атрибут HttpPost дает ту же ошибку. Если я изменю параметр как просто строку вместо пользовательского типа, он будет работать. вот как я называю веб-api: $ .ajax ({ url: "/ api/emailtemplate /", Тип: 'POST', данные: ko.toJSON (self), contentType: 'application/json ', – user1202839

+0

Странно, кажется, что нет ничего плохого. Не могли бы вы обновить свой внутренний вопрос с помощью большего количества кода? В частности, включите «открытый класс» и т. д., и вы можете дать пример кода JSON, возвращаемый методом 'Get'? – Kazu

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