CORS 拒绝 Cors 策略 (.WithOrigins) 中指定的白名单地址

CORS rejecting white-listed address specified in Cors Policy (.WithOrigins)

来源在 Startup.cs 中被列入白名单 (http://localhost:4200/),但请求因 Cors 而被拒绝。

我的 API 上的 GET 请求以及我尝试通过 SignalR 建立连接时都是如此。我可以通过 AllowAllOrigins 绕过 Cors 阻止 API 请求,但这不是 SignalR 的可行解决方案,它需要 .AllowCredentials.

拒绝表明我已将正确的域列入白名单。似乎它没有受到尊重。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
                options.AddPolicy(MyAllowSpecificOrigins,
                    builder =>
                        {
                            builder
                               .WithMethods("GET","POST")
                               .AllowAnyHeader()
                               .AllowCredentials()
                               .WithOrigins("http://localhost:4200/");
                        }));  

            services.AddRazorPages();
            services.AddControllers();
            services.AddSignalR();
            services.AddDbContext<WebApplication2Context>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("WebApplication2Context")));
        }

我知道正在应用该政策。当我将 withOrigins 更改为 allOrigins 时,它在启动时失败。

在列出起源于 WithOrigins() 时,确保它们 有一个尾随 /,否则,原点将永远不会匹配你的交叉原点 请求将失败。


    builder
        .WithMethods("GET","POST")
        .AllowAnyHeader()
        .AllowCredentials()
        .WithOrigins("http://localhost:4200"); // No trailing slash

确保您的配置具有正确的顺序,这意味着您的 services.AddCors 和 app.UseCors 必须在中间件管道中排在第一位

public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}

您需要像 SetIsOriginAllowed 一样允许主机来源,例如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
        options.AddPolicy(MyAllowSpecificOrigins,
            builder =>
                {
                    builder
                       .WithMethods("GET","POST")
                       .AllowAnyHeader()
                       .AllowCredentials()
                       .WithOrigins("http://localhost:4200"),
                       .SetIsOriginAllowed((host) => true)

                }));  

    services.AddRazorPages();
    services.AddControllers();
    services.AddSignalR();
    services.AddDbContext<WebApplication2Context>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("WebApplication2Context")));
}