Я пытаюсь «переключаться» между моими политиками CORS в зависимости от среды, в которой выполняется приложение.
У меня есть две политики, объявленные следующим образом:
services.AddCors(options =>
{
options.AddPolicy(CORSPolicies.PublicApi,
builder => builder
.AllowAnyHeader()
.WithMethods("POST", "GET")
.WithOrigins("https://domain1.com", "https://domain2.com"));
options.AddPolicy(CORSPolicies.Dev,
builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.AllowAnyOrigin());
});
Эти политики должны быть применимы только к нескольким контроллерам, поэтому я использую атрибут для их применения: политика
[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
[AllowAnonymous]
[EnableCors(CORSPolicies.PublicApi)]
public class PublicApiControllerBase : ControllerBase
{
}
PublicAPI
должна быть действительной для производства, где домены будут фактически ограничены. Политика Dev
разрешает все что угодно, так как я буду использовать это локально.
Я попытался установить политику по умолчанию равной Dev
при условии условного запуска приложения, но поскольку EnableCorsAttribute
переопределяет то, что определено app.UseCors()
, оно не работает, так как будет использоваться политика PublicApi
не важно что. Вот моя наивная попытка:
if (env.IsDevelopment())
{
app.UseCors(CORSPolicies.Dev);
}
else
{
app.UseCors();
}
Как я могу а) заставить мою политику PublicApi
вести себя по-разному в зависимости от среды, в которой работает мое приложение, или б) условно применить политику PublicApi
или Dev
в зависимости от окружающая среда?