2015-10-12 1 views
0

У меня есть угловое/MVC приложение. Пользователь может изменить запись, нажав кнопку a, вызывает службу, которая выполняет запись, чтобы обновить запись в БД. Он попадает в контроллер (я имею точку останова на конструктор), но, а не метод и бросает обратно 405.Угловое сообщение приложения для MVC webapi back end возвращает 405

Кнопка Click обработчик:

$scope.submit = function() { 
    console.log($scope.request); 
    requests.updateRequest($scope.request).then(onUpdate, onError); 
} 

Запрос ресурса:

var updateRequest = function (request) { 
    return $http.post("/api/request/update/", request).then(function (response) { 
     return response.data; 
    }); 
}; 

маршрутов сконфигурированы в отдельном файле:

config.Routes.MapHttpRoute("UpdateRequest", "api/request/update/", new { controller = "Requests", action = "UpdateRequest"}); 

Конструктор RequestController получает но я не могу понять, почему следующая конечная точка не попала.

метод управления:

[HttpPost] 
    public HttpResponseMessage UpdateRequest([FromBody] IRequest request) 
    { 
     try 
     { 
      var response = new HttpResponseMessage 
      { 
       StatusCode = HttpStatusCode.OK, 
       Content = 
        new ObjectContent(
        typeof(int), 
        request.Id, 
        new JsonMediaTypeFormatter()) 
      }; 
      return response; 
     } 
     catch (Exception ex) 
     { 
      throw new HttpResponseException(HttpStatusCode.InternalServerError); 
     } 
    } 

Любые идеи?

+0

Я пробовал несколько вариантов по методу конечных точек. Тот, который принимает объект как параметр и также пытается использовать вместо него httpput. Примечание. служба ресурсов действительно работает, поскольку у меня есть метод Get, который извлекает данные в первую очередь. – DazManCat

ответ

0

Обязательная привязка по умолчанию не работает с интерфейсами. Попробуйте изменить:

[FromBody] IRequest запрос

к конкретному типу, например,

Запрос запрос

Если вы хотите использовать интерфейс в вашем WebAPI проверить this blog post

+0

Это действительно очевидный момент! спасибо, не могу поверить, что я пропустил это! – DazManCat

+0

К сожалению, до сих пор нет радости. Я получаю страшный POST http: // localhost: 52961/api/request/update/405 (метод не разрешен) Несмотря на то, что у меня есть ET, HEAD, POST, DEBUG, PUT, DELETE, PATCH, OPTIONS разрешено в web.config. – DazManCat

+0

оставьте это как HttpPost, иначе вам придется выполнить дополнительную конфигурацию, чтобы получить put \ delete для работы. Является ли это единственным методом HttpPost в вашем контроллере? может быть проще показать весь код класса контроллера – sarin

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