尝试使用Javascript调用我的MVC WebAPI

尝试使用Javascript调用我的MVC WebAPI,javascript,asp.net-web-api,xmlhttprequest,Javascript,Asp.net Web Api,Xmlhttprequest,所以我有一个简单的WebAPI控制器与 [HttpGet] public string Demo() { System.Diagnostics.Debug.Print("API Demo call hit " + DateTime.Now.ToString()); return "Got Here"; } 由于调试输出,我可以看出它实际上是从我的javascript调用的。所以我知道我的脚本至少是连接的。我也知道如果我在这条线上放一个空档。。脚本(html页面)会暂停并等待,直到我让代

所以我有一个简单的WebAPI控制器与

[HttpGet]
public string Demo()
{
  System.Diagnostics.Debug.Print("API Demo call hit " + DateTime.Now.ToString());
  return "Got Here";
}
由于调试输出,我可以看出它实际上是从我的javascript调用的。所以我知道我的脚本至少是连接的。我也知道如果我在这条线上放一个空档。。脚本(html页面)会暂停并等待,直到我让代码继续。他们在说话,但我有两个问题

1) 每次进行发送调用时,都会出现脚本错误“NetworkError:未能在“XMLHttpRequest”上执行“发送”:未能加载“”。。。即使我知道它在和它说话。但我确实注意到,如果我没有捕获错误,脚本将在“发送”行失败,并且不会继续

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 />";
   }

}
函数CallWebAPI()
{
var displayResults=document.getElementById('responseDetails');
var xmlhttp=new XMLHttpRequest();
open(“GET”http://localhost:64769/api/demo“,假);
尝试
{
xmlhttp.send();
}
捕捉(错误)
{
displayResults.innerHTML+=err+“
”; } displayResults.innerHTML+=“结果…
”; for(xmlhttp中的var键) { displayResults.innerHTML+=key+“--”+xmlhttp[key]+“
”; } }
全部

所以经过一天半的胡闹,终于明白了。我想我是在桌面上运行一个HTML文件,而我的Web服务是在桌面上运行的

这是一个跨领域的事情。在.NET中使用HTTP客户端时,我不必处理此问题。。但当我尝试使用.NET以外的客户端时,我的Web服务实际上做出了响应。。但是客户端浏览器不会接受响应

修复方法是将我的api服务更改为

[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;
}

仅供参考。。我只是用Fiddler看我对API的调用。根据Fiddler(我几乎不知道如何使用),我在Inspector中看到调用,它在底部显示我的返回值(顶部显示客户端标题,底部显示我接受的返回)。所以听起来越来越像我的服务在工作,但是JavaScript方面有问题吗?