【问题标题】:Accessing Public Web API访问公共 Web API
【发布时间】:2015-11-20 21:44:55
【问题描述】:

希望有人能指出我正确的方向,我已经搜索了几天但仍然没有。我试图调用不同的 API 只是为了处理返回数据,但每次调用 API 时都会遇到相同的错误:

请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'Your Site' 不允许访问。响应的 HTTP 状态代码为 404

我知道我的调用正在进行,因为对于一个特定的 API,它会跟踪我的使用情况,并说我已经成功调用了大约 5 次,所以这意味着数据正在返回,但我的浏览器阻止了它。这只发生在公共 API 上。我通过 Azure 创建了自己的 API,设置了 CORS,称为 API,它工作得很好。但是,由于我无权访问公共服务器来设置和启用 CORS,因此我无法知道它们是如何设置的。

这是我调用 API 的代码:

MyAngularApp.service('APIService', function ($http) {
    return {
        getWork: function() {
            return $.ajax({
                url: "http://api.nfldata.apiphany.com/nfl/v2/JSON/Teams/2014",
                beforeSend: function (xhrObj) {
                    // Request headers
                    xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", "*******");
                },
                type: "GET",               
            })
        .done(function (data) {
            alert("success");
        })
        .fail(function () {
            alert("error");
        });
    }
  }
});

感谢任何帮助

【问题讨论】:

  • 是的,这是一个 CORS 问题,您可以使用 JSONP 解决它。通过直接调用 API,您不会遇到 CORS 问题,因为您不是跨域调用它,即您的网站 x.com 正在尝试调用 p.com,跨站点....只需输入 p.com进入浏览器使其成为直接调用。
  • @ppumkin 我试过 jsonp 但我对 jsonp 的回调方面感到困惑。它从不运行回调函数,它只是告诉我意外的符号 :,谢谢,我会进一步研究它
  • 是的,JSONP 有点痛苦。使用fiddler 查看响应中返回的数据。我怀疑您在 JS 中的语法不正确。在解析 toJSON 或其他内容之前,您可能忘记将响应括在 'string' 引号中。这是意外符号错误的常见问题。或者你可能不需要解析响应,因为它已经是 JSON 对象,你可以将它分配给一个内部变量。
  • 感谢刚刚下载的提琴手希望这能给我一些答案

标签: javascript api cors asp.net-web-api


【解决方案1】:

使用jsonp是一种方式,但我认为最好你实现一个CORS策略来授权这个域的请求,请阅读官方文档:Enabling Cross-Origin Requests in ASP.NET Web API 2

【讨论】:

  • 如果我可以访问他们的 API 设置,我会在为他们设置 CORS 之外的任何地方
猜你喜欢
  • 2022-01-27
  • 2020-07-01
  • 2021-11-29
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多