2017-02-22 58 views
1

Так что я простой WebAPI контроллер с ...Попытка использовать Javascript, чтобы назвать мой MVC WebAPI

[HttpGet] 
public string Demo() 
{ 
    System.Diagnostics.Debug.Print("API Demo call hit " + DateTime.Now.ToString()); 
    return "Got Here"; 
} 

Из-за выхода отладки, я могу сказать, что это на самом деле вызывался из моего JavaScript. Поэтому я знаю, что мой сценарий, по крайней мере, соединяется. Я также знаю, что если я помещу перерыв на линии, сценарий (html-страница) сделает паузу и дождитесь окончания кода. Так что они говорят, но у меня есть 2 вопроса ...

1) Каждый раз, когда я делаю вызов отправки, я получаю ошибку сценария «NetworkError: не удалось выполнить« отправить »на« XMLHttpRequest »: не удалось загрузить ' http://localhost:64769/api/demo «... хотя я знаю, что это говорит с ним. Но я заметил, что если я НЕ ловушка для ошибок, скрипт выходит из строя в строке «Отправить» и не продолжается.

2) Однако с ловушкой ошибки сценарий продолжает (как и ожидалось), но XMLHttpRequest не имеет моего возврата. (например, responseText пуст). Почти каждое свойство объекта пустое или пустое.

Так что я думаю, что мой ответ пуст, потому что есть проблема с «отправкой». Однако, поскольку он на самом деле вызывает мой контроллер и ждет его запуска, я теряюсь относительно проблемы.

Вот мой сценарий ...

function CallWebAPI() 
{ 
    var displayResults = document.getElementById('responseDetails'); 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("GET", "http://localhost:64769/api/demo", false); 

    try 
    { 
     xmlhttp.send(); 
    } 
    catch(err) 
    { 
     displayResults.innerHTML += err + "<br />"; 
    } 

    displayResults.innerHTML += "The Results...<br />"; 

    for (var key in xmlhttp) 
    { 
    displayResults.innerHTML += key + "---" + xmlhttp[key] + "<br />"; 
    } 

} 
+0

FYI .. Я просто использовал Fiddler смотреть, как мой вызов моего API. Согласно Fiddler, (который я едва знаю, как использовать), я вижу вызов в Инспекторе, и он показывает мое возвращаемое значение в нижней части (верхняя часть показывает заголовок клиента, в нижней части показан возврат, который я принимаю). Так что это даже звучит все больше и больше, как работает мой сервис, но что-то не так со стороны JavaScript? –

ответ

1

Все,

Таким образом, после целого дня и половины бездельничал, наконец, понял это. Наверное, я запускал HTML-файл с моего рабочего стола, и моя веб-служба работала на http://localhost:64769.

Это одно из этих предметов с перекрестными доменами. При использовании HTTP-клиента в .NET мне не пришлось иметь дело с этим. Но как только я попытался использовать клиент, отличный от .NET, мой веб-сервис действительно ответил ... но браузер-клиент не согласился с ответом.

Исправление было изменить мою службу апите на ...

[HttpGet] 
    public HttpResponseMessage Demo() 
    { 
     string myReturnMessage = "API Demo call hit " + DateTime.Now.ToString(); 
     System.Diagnostics.Debug.Print(myReturnMessage); 

     HttpResponseMessage myReturn = this.Request.CreateResponse(System.Net.HttpStatusCode.OK, myReturnMessage); 

     //This was the KEY!!!! 
     myReturn.Headers.Add("Access-Control-Allow-Origin", "*"); 

     return myReturn; 
    }