. Net Core Настройте CORS для одновременной работы всех поддоменов и всех портов локального хоста. - PullRequest
2 голосов
/ 10 марта 2020

Я хотел бы разрешить запросы 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 независимо от порта.

...