在我的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请求时,OPTIONS请求在Chrome中如下所示:
尽管事实上允许OPTIONS响应中的Access-Control-Allow-Origin
标头。在2.1中有效,但在2.2中无效。确切的错误消息是:
CORS策略已阻止对“ MY_REQUEST_URI”处的访存的访问:请求的资源上不存在“ Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”以在禁用CORS的情况下获取资源。
我也尝试过删除政策中的AllowCredentials()
,但这没什么用。
答案 0 :(得分:0)
看起来您的CORS配置正常。但是没有实际的PUT处理程序。首先,您应该使用诸如postman或ARC之类的其他客户端检查您的API,然后考虑使用CORS。
答案 1 :(得分:0)
关闭新的Endpoint Routing功能和disabling the WebDav module in IIS的组合为我解决了此问题。我相信由于端点路由,我的预检请求实际上是由WebDav模块而不是由我的应用程序处理的。
要关闭端点路由,请将标志设置为false
中的.AddMvc()
:
services.AddMvc(options =>
{
...other options
options.EnableEndpointRouting = false;
})
答案 2 :(得分:-1)
public static IServiceCollection AddAllowAllCors(this IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
{
builder.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.AllowAnyOrigin();
});
});
return services;
}