Угловой пост, поставить, удалить возвращает 405

Я новичок в угловом.

Я не могу вызывать методы POST, PUT и DELETE, используя angular (GET работает нормально). У меня есть сервер .NET WebApi, на котором все методы и все URL-адреса ресурсов работают и тестируются с использованием Advanced Rest Client.

Это код:

$scope.updateUser = function() {

    var url = 'http://localhost/api/users/' + $scope.selectedId;
    $http.put(url, $scope.user,{'content-type' : 'application/json'})
        .then(
            function(response) {
                alert("1");
            },
            function(errResponse) {
                alert("2");
            }
        );
};

Я пробовал с 'content-type':'application/x-www-form-urlencoded', я пробовал вообще без конфигурации, я пробовал с успехом и ошибкой, и я пробовал с атрибутами команды и данных.

Я ничего не получаю, и во время отладки errResponse содержит только данные запроса. Проверил вкладку сети в инструментах разработчика и обнаружил, что возвращается ошибка 405. Опять же, все URL-адреса действительны и протестированы с использованием стороннего клиентского приложения REST.

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: web.config:

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="WebDAVModule" />
  </modules>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
  </httpProtocol>
  </system.webServer>

ПОСТАВИТЬ пример:

    [HttpPut]
    [Route("api/users/{id}")]
    public IHttpActionResult updateUser(int id, User user)

С уважением, Идо


person Ido Barash    schedule 06.08.2016    source источник
comment
Поделитесь методами API, web.config, частью вашего global.asax. Вы дали очень мало кода, чтобы уйти.   -  person Hanlet Escaño    schedule 06.08.2016
comment
Является ли ваш атрибут [HttpPut] от System.Web.Http? (Не от System.Web.Mvc)   -  person Hanlet Escaño    schedule 06.08.2016
comment
Добавлен web.config и пример   -  person Ido Barash    schedule 06.08.2016
comment
да. System.Web.Http   -  person Ido Barash    schedule 06.08.2016
comment
Это помогает? stackoverflow.com/a/14322875/752527   -  person Hanlet Escaño    schedule 06.08.2016
comment
Я получаю ошибки компиляции в PUT. У меня есть только HttpPUT без простого атрибута PUT.   -  person Ido Barash    schedule 06.08.2016
comment
Если вы получаете ошибку 405, похоже, что глагол не разрешен. В web.config для ExtensionlessUrlHandler Вместо verv=* может быть что-то вроде verb=GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS   -  person Hedi    schedule 06.08.2016
comment
Нет... Это не сработало. Но сервисы работают... только не из angular   -  person Ido Barash    schedule 06.08.2016
comment
Возможно, заменить $http.put(url, $scope.user,... на $http.put(url, {user: $scope.user},...   -  person Hedi    schedule 06.08.2016
comment
Нет. Nl даже пытался без передачи пользователем {}. Я просто хочу поймать это на сервере   -  person Ido Barash    schedule 06.08.2016


Ответы (1)


добавление этого фрагмента в web.config должно решить проблему:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <remove name="WebDAVModule" />
   </modules>
</system.webServer>
person Saeid Doroudi    schedule 06.08.2016
comment
Нет.. не было. Я могу получить доступ к этим URL-адресам... только не из angular. - person Ido Barash; 06.08.2016