在WebAPI上启用CORS, Chrome和FF仍然不起作用

CORS Enabled On WebAPI, Chrome and FF still dont work

本文关键字:FF 不起作用 Chrome WebAPI 启用 CORS      更新时间:2023-09-26

我已经在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