javascript - 尝试使用 Javascript 调用我的 MVC WebAPI

标签 javascript asp.net-web-api xmlhttprequest

所以我有一个简单的 WebAPI Controller ......

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

由于调试输出,我可以看出它实际上是从我的 JavaScript 中调用的。所以我知道我的脚本至少正在连接。我还知道,如果我在线上放置一个中断..脚本(html 页面)会暂停并等待,直到我让代码继续。他们正在讨论,但我有两个问题......

1) 每次我进行发送调用时,我都会收到脚本错误“NetworkError: 无法在 'XMLHttpRequest' 上执行 'send': 无法加载 ' http://localhost:64769/api/demo '”...即使我知道它是与它交谈。但我确实注意到,如果我不捕获错误,脚本将在“发送”行失败并且不会继续。

2) 然而,由于错误陷阱,脚本确实继续(如预期),但 XMLHttpRequest 没有我的返回。 (例如,responseText 为空)..几乎对象的每个属性都是空白或 null。

所以我认为我的回复是空的,因为“发送”有问题。然而,因为它实际上正在调用我的 Controller 并等待它运行,所以我不知道问题是什么?

这是我的脚本...

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

}

最佳答案

全部,

折腾了一天半,终于搞清楚了。我想我正在从桌面运行一个 HTML 文件,而我的 Web 服务正在 http://localhost:64769 上运行。 .

这是跨域的事情之一。在 .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;
}

关于javascript - 尝试使用 Javascript 调用我的 MVC WebAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42404543/

相关文章:

java - 使用 volley 发出请求时未得到响应

javascript - Bootstrap datepicker 日期范围结束日期更新

javascript - *日历程序* 无法为该日历程序编写循环以正确显示

javascript - twitter bootstrap popover 插件错误 - this.isHTML 不是一个函数

javascript - 在视频 html 标签中将多个文件作为一个播放

c# - 如何构建 Web API Controller 并返回结果

rest - 在 REST API 中支持多种语言

c# - api Controller 中的多个 HttpPost 方法导致 500 Internal server error

带有发送空正文的 formdata 的 Javascript XMLHttpRequest

ios - 在 iphone 中管理 hls native 行为?