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()));
在您的代码中,我们发现您同时配置了AllowAnyOrigin
和AllowCredentials
这两个方法,这会导致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 解决 REACT 中的 CORS 错误