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



原点为白色(http://localhost:4200/)在Startup.cs中,但由于Cors,请求被拒绝。

当我尝试通过SignalR建立连接时,API上的GET请求也是如此。我可以绕过Cors通过AllowAllOrigins阻止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

确保您的配置有正确的顺序,这意味着您的服务。AddCors和应用程序。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")));
}

最新更新