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")));
}
来源在 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")));
}