Приложение Net Core Webapi/SignalR заблокировано политикой CORS (netcore 5 с потребителем net framework 4.7.2. FE)

#javascript #.net-core #browser #cors #webapi

Вопрос:

У меня есть net framework 4.7.2 FE, в котором я хотел бы использовать новое приложение netcore 5 webapi/SignalR.

На данный момент у меня оба запущены на моей машине с FE в VS2017 под локальным IIS (https://local.redacted.com) и последний в IIS Express VS2019, и оба они подключены с помощью кнопки воспроизведения/отладки.

Я установил cors nuget для netcore и в моем запуске есть следующее:

 public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(c =>
            {
                c.AddPolicy(
                    "AllowCCORSOrigin",
                    options => options.WithOrigins("https://local.redacted.com/")
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            });
        services.AddControllers();
        services.AddSingleton<KillChecker>();
        services.AddHttpContextAccessor();
        services.AddSignalR().AddMessagePackProtocol();
        services.AddSignalR(
            o =>
                {
                    o.EnableDetailedErrors = true;
                });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseFileServer(); //needed?
        app.UseStaticFiles();
        app.UseRouting();

        app.UseCors(builder =>
            {
                builder
                    .WithOrigins("https://local.redacted.com/")
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();
            });
        
        app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapHub<KillHub>("/killhub");
            });
    }
}
 

Я также украсил свой контроллер запуска:

 [Route("[controller]"), EnableCors()]
public class LaunchController : Controller
 

Из приложения FE я получаю следующую ошибку CORS при запуске моего JS:

 const options = {
    method: "POST",
    body: JSON.stringify(params),
    headers: {
        'content-type': "application/json"
    }
};
fetch("https://localhost:60907/Launch", options)
    .then(response => response.json())
    .then(data => console.log(data))
    .then(console.log('lift off'));
 

Доступ для получения по адресу ‘https://localhost:60907/Launch» от происхождения «https://local.redacted.com» заблокирован политикой CORS: Ответ на предполетный запрос не проходит проверку контроля доступа: На запрошенном ресурсе отсутствует заголовок «Доступ-Контроль-Разрешить-Происхождение». Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса на «без cors», чтобы получить ресурс с отключенным CORS.