ASP.NET Core 2.2 CORS 没有“Access-Control-Allow-Origin”标头 [关闭]

Posted

技术标签:

【中文标题】ASP.NET Core 2.2 CORS 没有“Access-Control-Allow-Origin”标头 [关闭]【英文标题】:ASP.NET Core 2.2 CORS No 'Access-Control-Allow-Origin' header [closed] 【发布时间】:2020-08-30 23:55:24 【问题描述】:

我无法使用 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 中配置方法之后的第一行

app.UseCors("AllowAll");

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

我做了这个小测试,只是因为我使用 angular 来使用这个 API,我遇到了同样的问题。

错误信息:

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

我在另一个工作的 IIS 中有相同的应用程序/代码。我猜这是 IIS 的问题


编辑 -> 2020-05-16

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

【问题讨论】:

.WithExposedHeaders("content-type") - 尝试将其添加到 CORS 构建器 .WithExposedHeaders("content-type") 不起作用 在 IIS 中,需要添加 OPTIONS 方法。默认情况下 OPTIONS 不可用。 是的...@user13422309 我在上周六弄明白了,因为我穿上了我的 EDIT -> 2020-05-16。有人将 OPTIONS 动词设为假 :( 【参考方案1】:

这就是我在 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 module 并进行配置。

【讨论】:

它没有用。我在另一个 IIS 工作中有相同的应用程序/代码。我猜这是 IIS 的问题 嗨@ProgramadorDesenvolvedor,您可以尝试安装IIS CORS 模块,该模块为IIS 服务器提供正确响应预检请求的方法。有关 IIS 中 CORS 的更多信息,请查看我上面的更新。【参考方案2】:

有人在 Request Filtering -> HTTP Verbs on IIS 中将 OPTIONS 设置为 false

【讨论】:

以上是关于ASP.NET Core 2.2 CORS 没有“Access-Control-Allow-Origin”标头 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 SIGNAL R 的 Angular 7 和 ASP.NET Core 2.2 的 CORS 策略问题

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

ASP.NET Core AWS 无服务器和 CORS

如何使用 ASP.NET Core 解决 REACT 中的 CORS 错误

asp.net core mvc cors请求被拒绝[重复]

仅在文件上传中出现 Asp.Net Core API CORS 策略错误