Как правильно включить CORS для субдомена в проекте ASP.NET Core 2.2? - PullRequest
3 голосов
/ 06 ноября 2019

Я пытаюсь обслуживать свои активы на поддомене, установленном в том же домене. Поэтому, когда моим основным доменом является https://localhost:44111/, URL-адрес ресурса будет выглядеть примерно так: https://assets.localhost:44111/css/style.css

. Файл style.css запрашивает включение пользовательского шрифта my_custom_font.eot, например,

@font-face {
    ....
    src: url('/css/fonts/my_custom_font.eot?123');
}

Когда я включаю файл style.css, который находится на поддомене активов, я получаю следующую ошибку

Запрос перекрестного источника заблокирован: та же политика происхождения запрещает чтение удаленного ресурса на https://assets.localhost:44111/css/fonts/my_custom_font.eot?123. (причина: отсутствует заголовок CORS 'Access-Control-Allow-Origin').

Чтобы убедиться, что я свободен, оба style.css и my_custom_font.eot расположены на одном и том жедомен assets.localhost:44111. Запрос на включение style.css работает без проблем. Но когда style.css делает запрос на включение my_custom_font.eot, запрос запрещается.

Я пытался следовать документации , чтобы включить CORS. Я добавил следующий код в метод Startup.ConfigureServices(IServiceCollection services)

services.AddCors(options =>
{
    options.AddPolicy("AllowSubDomainTraffic",
    builder =>
    {
        builder.WithOrigins("https://assets.localhost:44111")
               .AllowAnyHeader()
               .AllowAnyMethod();
    });
});

Затем в методе Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) я добавил следующий

app.UseCors("AllowSubDomainTraffic");

Однако я все еще получаю CORS header ‘Access-Control-Allow-Origin’ missingошибка в консоли браузера.

Так я реагирую на субдомены в моем приложении

app.MapWhen(context => {
    return context.Request.Host.Value.StartsWith("assets.", StringComparison.OrdinalIgnoreCase)
} (appBuilder) =>
{
    appBuilder.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider("C:/assets"),
    });
});

Как правильно включить CORS для субдомена?

1 Ответ

2 голосов
/ 07 ноября 2019

WithOrigins (строка []) принимает параметр строки (массив строки, строка []). Это позволяет вам:

builder.WithOrigins("https://localhost:44111", "https://assets.localhost:44111")
  .AllowAnyHeader()
  .AllowAnyMethod();

примечание: не забывайте, что URL-адреса cors не могут заканчиваться на /

...