原点为白色(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")));
}