Я хотел бы разрешить запросы CORS к общему внутреннему API со всех внутренних веб-сайтов (*.myintra.net
), а также со всех портов localhost
(для тех случаев, когда мы отлаживаем различные приложения локально в IIS Express, т.е. * 1003). *, http://localhost:54321
, et c).
В этом ответе показано, как использовать SetIsOriginAllowedToAllowWildcardSubdomains()
для разрешения всех поддоменов.
Этот ответ показывает, как разрешить любой порт localhost
с помощью функции делегата SetIsOriginAllowed()
.
Однако, похоже, что эти опции не работают вместе. Моя конфигурация:
private bool AllowLocalhost(string origin)
{
var uri = new Uri(origin);
return (uri.Host == "localhost");
}
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
string corsList = "https://*.myintra.net,https://some.specificurl.com".Split(",");
options.AddPolicy("CorsPolicy", builder =>
{
builder
.WithOrigins(corsList.ToArray())
.SetIsOriginAllowedToAllowWildcardSubdomains()
.SetIsOriginAllowed(origin => AllowLocalhost(origin)) // disallows calls from myapp.myintra.net since it doesn't uri.Host match "localhost"
...();
});
});
...
}
Я могу поменять местами порядок конфигурации:
.SetIsOriginAllowed(origin => AllowLocalhost(origin))
.SetIsOriginAllowedToAllowWildcardSubdomains()
Но тогда функция AllowLocalhost()
никогда не вызывается. Я полагаю, что имеет смысл, что только одна из них работает одновременно, так как первая проверка может вернуть true
, только вторая будет возвращать false
.
В идеале мне бы хотелось, чтобы решение не Мне не нужно переопределять allow wildcard
logi c внутри моей функции AllowLocalhost()
.
Также стоит отметить, что мне это действительно нужно только в среде разработки. Производство должно было бы разрешать символы подстановки, но запрещать localhost
независимо от порта.