尽管标头正确,但CORS请求被拒绝

时间:2019-02-25 21:47:36

标签: c# asp.net-core .net-core asp.net-core-2.2

在我的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 request

但是实际的PUT请求失败并显示405: PUT request

尽管事实上允许OPTIONS响应中的Access-Control-Allow-Origin标头。在2.1中有效,但在2.2中无效。确切的错误消息是:

  

CORS策略已阻止对“ MY_REQUEST_URI”处的访存的访问:请求的资源上不存在“ Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”以在禁用CORS的情况下获取资源。

我也尝试过删除政策中的AllowCredentials(),但这没什么用。

3 个答案:

答案 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;
}