2017-02-08 16 views
0

У меня есть странная проблема: у меня есть приложение clientSide (jquery), работающее с WebAPI в том же домене. Когда я размещаю его на IIS на своем локальном компьютере, в качестве корневого веб-сайта (Sites-> MyApp), он работает нормально (как для Get, так и для Post). Типичный вызов API выглядит следующим образом:Ajax Post to Web API успешно завершен, но .. терпит неудачу на стороне клиента при размещении на веб-сайте по умолчанию (IIS)

$.get("api/GetList", null, function (data) { 
     var list = data; 
    }) 

, но, когда я у себя под из «Default Web Site» в IIS, как суб Заявке, типичный вызов API выглядит следующим образом:

$.get("MyApp/api/GetList", null, function (data) { 
     var list = data; 
    }) 

Все вызовы GET работают нормально, но вызов POST действует странно. Я делаю POST вызов, как это:

$.ajax({ 
      url: "MyApp/api/Fields", 
      type: 'POST', 
      dataType: 'json', 
      contentType: false, 
      cache: false, 
      processData: false, 
      data: data, 
      success: function (res) { 
       var x = res;    
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       // 
      } 
     }); 

Метод Web API выглядит следующим образом:

[HttpPost] 
[Route("api/Fields")] 
public async Task<IHttpActionResult> Post() {... 

Когда я выполнить вызов POST, он поступает на сервер и метод сервер работает нормально, но когда он вернется, я получаю сообщение об ошибке. Отсюда: http://localhost/MyApp/index.html я нажимаю кнопку отправить и получить это (даже если действие удалось на стороне сервера !!): Ошибка HTTP 404.0 - Not Found Запрошенный URL http://localhost:80/api/Fields?input_1=sometext

Так как вы можете видеть, маршрут к MyApp исчез и IIS обрабатывает запрос, поскольку он был ПОЛУЧИТ, хотя я сделал POST !! и возвращается к корню: Веб-сайт по умолчанию вместо того, чтобы возвращаться в localhost/MyApp.

Тот же код 1: 1 при работе на тестовом сервере в IIS с одинаковыми настройками работает нормально без этой ошибки. Любые идеи?

+0

Возможно, перефразировать и сократить его немного: я делаю AJAX Post для http: // localhost/MyApp/api/fields (используя F5 в VS2015, я вижу, что он достигает правильного метода) Но я получаю в ответ: HTTP Ошибка 404.0 - не найден Запрошенный URL http: // localhost: 80/api/Fields? Input_1 = 123 и: запрошенный ресурс не поддерживает метод http get '!!! 1. Это был POST. 2. Я назвал http: // localhost/MyApp/api/fields, а не http: // localhost: 80/api/Fields. – amira

ответ

0

После многочисленных исследований, не имеющий ответа из Интернета, я вдруг увидел, что форма тег содержал атрибут действия !:

<form id="Id" name="Name" action="api/action" enctype="multipart/form-data" novalidate> 

Как только я удалил атрибут действия, он решил экстренный вызов API. но я также должен был предотвратить поведение формы по умолчанию. Поэтому я поставил вызов Ajax сообщение Api внутри $ (документ) .ready функции следующим образом:

jQuery(function ($) { 
     var frm = $('#FormId'); 
     frm.submit(function (ev) { 
      ev.preventDefault(); 

      //do validation etc.. 

      //do Ajax Post 
      $.ajax({ 
       url: "api/Fields/", 
       method: 'POST', 
       dataType: 'json', 
       contentType: false,... 
      }); 
      return false; 
     }); 
    }); 

Не забудьте предотвратить поведение формы по умолчанию!

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

  • Нет связанных вопросов^_^