Web API 2 启用 CORS 引发 Access-Control-Allow-Origin 错误

Posted

技术标签:

【中文标题】Web API 2 启用 CORS 引发 Access-Control-Allow-Origin 错误【英文标题】:Web API 2 enable CORS throwing Access-Control-Allow-Origin error 【发布时间】: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' 因此不允许访问。

这里有什么我遗漏的吗?

【问题讨论】:

【参考方案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

以上是关于Web API 2 启用 CORS 引发 Access-Control-Allow-Origin 错误的主要内容,如果未能解决你的问题,请参考以下文章

启用 CORS 的 Web Api 2 facebook 身份验证

在 ASP .NET Core 2.1 Web Api 中启用 CORS

本地 Javascript Fetch Post 请求失败,调用 ASP.NET Core 2.2 Web API。 CORS 已启用

在 Azure 上为 .NET Web Api 启用 CORS

为 Web API 启用多个 CORS

WEB API:我显然无法启用 CORS(?)