【问题标题】:Web API 2 enable CORS throwing Access-Control-Allow-Origin errorWeb API 2 启用 CORS 引发 Access-Control-Allow-Origin 错误
【发布时间】:2014-12-25 02:49:46
【问题描述】:

我和this post 有同样的问题,我已经为 cors 安装了 nuget 包并设置了

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

在我的 api 配置中,但它仍然阻止从我的开发服务器(我调用 api)到我的测试服务器(部署 api)的访问

我已经将 web api 2 的 nuget 包更新到了​​ 2.2 的最新版本,但这也没有解决问题。

我得到的错误是:

XMLHttpRequest 无法加载 http://www.example.com/api。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://test.local' 因此不允许访问。

这里有什么我遗漏的吗?

【问题讨论】:

    标签: c# cors asp.net-web-api2


    【解决方案1】:

    我之前也遇到过这个问题,很可能是来自客户端请求。如果您使用的是 jQuery(请不要),通常应该存在 crossDomain: true。我会先尝试来自fiddler 的相同请求,看看您是否仍然遇到相同的错误。

    【讨论】:

    • 您能否举个例子说明如何在没有 jQuery 的情况下执行请求
    • 我假设你的 api 在http://www.example.com/api/MyController,当你从POSTMAN 发出相同的POSTGET 请求时会发生什么?你看到同样的信息吗?
    • 这意味着您没有触及 API 的端点。这与 CORS 无关,请确保您在控制器中调用了正确的方法并为该操作启用了 http 方法。例如向http://www.example.com/api/mycontroller/myaction 发出GET 请求应该在myaction 方法之上添加[HttpGet]
    • 啊,就是这样 - 我忘了将 url 添加到实际操作中,d'uh。曾经是其中之一。谢谢
    【解决方案2】:

    许多浏览器(包括 chrome),不喜欢 origins 标头的通配符 *

    config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
    

    应替换为:

    config.EnableCors(new EnableCorsAttribute("http://www.clientURL.com", "*", "*"));
    

    如果您需要超过 1 个网站,origins 参数将接受以逗号分隔的字符串。

    【讨论】:

    • 星号实际上对我有用,使用网站列表会相当反直觉,因为这是我们的许多附属公司都可以调用的 api。我不想在每次添加或删除会员时添加或删除 url 并重新部署 api
    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 2018-02-02
    • 2021-06-17
    • 2016-09-30
    • 2015-08-17
    • 2014-08-11
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多