【发布时间】:2019-02-25 21:47:35
【问题描述】:
在我的 ASP.Net Core 2.2 设置中,我有一种方法可以创建“允许所有”CORS 策略
public static IServiceCollection AddAllowAllCors(this IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
{
builder.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed(_ => true);
});
});
return services;
}
ConfigureServices中添加的:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAllowAllCors();
...
}
我在 Configure 方法中激活的:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseCors("AllowAll");
...
}
当我尝试从我的 React 应用发出 PUT 请求时,Chrome 中的 OPTIONS 请求如下所示:
尽管允许 OPTIONS 响应中的 Access-Control-Allow-Origin 标头是允许的。这在 2.1 中有效,但在 2.2 中无效。确切的错误信息是:
访问“MY_REQUEST_URI”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
我也尝试在策略中删除 AllowCredentials(),但这并没有什么不同。
【问题讨论】:
-
我认为默认情况下错误消息不会附加 CORS 策略。因此,CORS 错误只是它似乎认为没有处理程序可以处理对该端点的 PUT 请求的事实。任何机会将其设置为
[HttpPost]而不是[HttpPut] -
看起来 ASP.net 核心将响应带有 Access-Control-Allow-Methods 的
OPTIONS请求,无论 Access-Control-Request-Method 标头设置为什么,无论是否有处理程序因为那个特定的方法确实存在 -
我刚刚使用
OPTIONS和Access-Control-Request-Method: INVALID_METHOD对其进行了测试,选项请求返回为204,Access-Control-Allow-Methods: INVALID_METHOD -
您可以将 .Build() 添加到构建器的末尾,然后再试一次吗?
-
您能否为此提供minimal reproducible example?
标签: c# asp.net-core .net-core asp.net-core-2.2