首页 > 解决方案 > ASP.NET Core 2.2 CORS 没有“Access-Control-Allow-Origin”标头

问题描述

我无法使用 ASP.NET Core 2.2 Web api。

下面的这段 javascript 代码运行良好,我可以让所有客户都很好

fetch('https://10.20.0.20:8081/api/clients/list').then(data => { data.json().then(dt=>{console.log(dt)}) }).catch(error => { console.log(error)});

但是这个不行

fetch('https://10.20.0.20:8081/api/clients/list',{ "headers": {"content-type": "application/json"}}).then(data => { data.json().then(dt=>{console.log(dt)}) }).catch(error => { console.log(error)});

嗯......这是我在 Startup.cs 的 ConfigureServices 方法中所拥有的

services.AddCors(setup => setup.AddPolicy("AllowAll", builder => builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials()));

我在 Startup.cs 的 Configure 方法之后的第一行

app.UseCors("AllowAll");

当我在上面评论这行时,两个 fetch 停止工作。

我做了这个小测试只是因为我使用 Angular 来使用这个 API,并且我面临同样的问题。

错误信息:

CORS 策略已阻止从源“ https://10.20.0.20:8080 ”获取“ https://10.20.0.20:8081/api/clients/Listar ”的访问权限:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

我在另一个 IIS 工作中有相同的应用程序/代码。我想这与 IIS 有关


编辑-> 2020-05-16

我做了一个中间件来检查所有带有context.Request.Method的请求方法。在我的本地机器上,我得到了 GET 和 OPTIONS 方法,但在这个服务器上,我只得到了 GET。我想问题出在这台服务器上。

标签: c#asp.net-corecors

解决方案


这就是我在 Startup.cs 的 ConfigureServices 方法中所拥有的

services.AddCors(setup => setup.AddPolicy("AllowAll", builder => builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials()));

在您的代码中,我们可以发现您同时配置了AllowAnyOriginAllowCredentials方法,这会导致 CORS 服务返回无效的 CORS 响应。

请修改您的代码以启用特定来源,如下所示。

services.AddCors(setup => 
    setup.AddPolicy("AllowAll", builder => 
        builder.WithOrigins("https://10.20.0.20:8080")
        .AllowAnyHeader()
        .AllowAnyMethod()
        .AllowCredentials())
    );

我在另一个 IIS 工作中有相同的应用程序/代码。我想这与 IIS 有关

请检查您是否为您的 IIS 站点启用了 Windows 身份验证,您可以尝试为您的站点安装IIS CORS 模块并进行配置。


推荐阅读