在asp.net核心中,我可以使用中间件在某些方法上启用CORS,例如described here
我想知道是否有可能为localhost
上的任何方案和任何端口启用CORS(仅用于测试目的)。我尝试使用通配符,但不起作用
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
if(_environment.IsDevelopment())
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins("http://localhost/*",
"https://localhost/*");
});
});
}
else
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins("http://example.com",
"http://www.contoso.com");
});
});
}
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
答案 0 :(得分:4)
ASP.NET Core的SetIsOriginAllowed
方法使您可以完全控制是否允许起源参与CORS。这是基于您的代码示例的示例用法:
if(_environment.IsDevelopment())
{
options.AddDefaultPolicy(builder =>
{
builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost");
});
}
else
{
// ...
}
传递给origin
委托的SetIsOriginAllowed
值是完整原点,看起来像http://localhost:8080
。上面的代码使用Uri
将Host
与localhost
进行比较,最终允许所有localhost
的起源。
答案 1 :(得分:0)
我目前正在使用它进行测试,并且可以正常工作,如果您删除通配符,则应该可以使用。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddMvc();
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://localhost");
});
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}