在WebAPI上启用CORS, Chrome和FF仍然不起作用
CORS Enabled On WebAPI, Chrome and FF still dont work
我已经在webApi上启用了CORS
var corsAttr = new EnableCorsAttribute("http://localhost:14054", "*", "*") {SupportsCredentials = true};
config.EnableCors(corsAttr);
但是当我从FF中创建web项目时,我仍然得到错误
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:28821/Authenticate. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).1(unknown)
这是我在chrome中得到的
XMLHttpRequest cannot load http://localhost:28821/Authenticate. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:14054' is therefore not allowed access.
当在Edge或IE中做同样的事情时,它可以工作。我已经做了一堆阅读,但不知道如何停止飞行前停止,但我想我在某处阅读铬&;FF还包括端口号。
不管怎样,我都很生气,谁能告诉我我做错了什么吗?
编辑另一件事是这是我已经发布的公共端点并且能够使用移动应用来很好地消费api。这是在我开始开发web应用程序之前。
编辑
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE, PATCH" />
<add name="Access-Control-Allow-Headers" value="authorization,accept,content-type,origin,cache-control,x-requested-with" />
<add name="Access-Control-Expose-Headers" value="x-sf3-api-version" />
</customHeaders>
</httpProtocol>
这是web配置,上面的enablecors()在startup.register()
它不是OAuth或认证逻辑因为它从邮差工作,从移动
在我们自己的项目中,当通过AJAX调用NTLM保护的REST端点时,我们遇到了类似的问题- Chrome报告CORS错误,但IE/Edge工作正常。
这里有一些提示,可以帮助你了解这个问题。
我建议下载Telerik Fiddler,它可以让你看到请求和响应通过电线。在我们的例子中,Web API实际上返回了一个有效的HTTP 200响应,因此很明显Chrome随后决定将其阻止为不受信任。在我们的示例中,我们错过了在设置服务器端时确实拥有的{SupportsCredentials = true}
部分。
然而,修复后(它开始通过jQuery调用工作,我们使用xhrFields: { withCredentials: true }
),我们注意到,在一个React应用程序中,我们使用fetch,而不是通过传递凭据,我们得到一个401/403。然后添加{ credentials: 'include' }
允许该调用也工作。
希望这篇文章能帮助到一些人,因为它让我们难住了很长一段时间
查看EnableCorsAttribute方法,第一个属性是允许查询您的站点的地址。
当你说它在IE中工作时,这应该是因为访问它的页面在另一个地址上而不是http://localhost:14054
。
你的代码应该像这样:
var corsAttr = new EnableCorsAttribute("*", "*", "*") {SupportsCredentials = true};
config.EnableCors(corsAttr);
或看ASP。. NET文档(关于控制器或方法):
[EnableCors(来源:"",标题:"",方法:"*")]
public class TestController : ApiController
{
// Controller methods not shown...
}
编辑:检查我在这里做的另一个答案,可能是您的方法实现正在崩溃(可能是您的凭据逻辑,这意味着它不是CORS问题),这不会使API返回Access-Control-Allow-Origin
头
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- Javascript/AAJAX在Opera中不起作用,在FF/IE/Chrome中完美工作
- Image Map 在 FF 和 IE 中不起作用(使用 onclick javascript)
- jQuery .html('
') 在 FF 和 Opera 中不起作用
- AJAX在FF中不起作用,在Chrome中运行良好
- Onchange,向上,向下箭头键适用于FF和Chrome,但在IE中不起作用
- PHP/JavaScript 检查/取消检查在 FF 中工作,但在 IE 中不起作用
- 为什么这个脚本在FF和IE中有效,但在谷歌浏览器中不起作用
- Javascript函数在IE中工作,但在FF,Chrome或Mobile Safari中不起作用
- JavaScript添加到书签在FF中不起作用>=23.0
- Ajax方法在FF中不起作用
- 使用d3将图像添加到svg容器中,这在FF和Safari上不起作用
- 伪元素的CSS动画在FF中不起作用
- href链接用左键调用ajax,并用中键在新选项卡中打开-在FF中不起作用
- 在WebAPI上启用CORS, Chrome和FF仍然不起作用
- JS(Moo Tools)Slider在FF和Chrome中不起作用
- Javascript代码在FF中工作,但在IE中不起作用
- 动态应用图像 src 在 FF 和 IE 中不起作用
- function(){}(args) 在 FF 中不起作用