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 发出相同的POST
或GET
请求时会发生什么?你看到同样的信息吗?
这意味着您没有触及 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 已启用