Подтвердить что ты не робот

ASP.NET 5: Access-Control-Allow-Origin в ответ

Из того, что я понимаю, при включенном CORS, модель ответа должна включать следующую информацию заголовка (при условии, что я хочу разрешить все):

Access-Control-Allow-Origin: *
Access-Control-Allow-Method: *
Access-Control-Allow-Header: *

Включение этого параметра в Startup:

public void ConfigureServices(IServiceCollection services)
{
    //...
    services.AddCors();
    services.ConfigureCors(options => 
    {
        options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
    });
    //...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //...
    app.UseCors("AllowAll");
    //...
}

Проблема заключается в том, что ни один из этих заголовков не возвращается, и я получаю следующую ошибку при попытке запросить API:

Ответ на запрос перед полетом не проходит проверку контроля доступа: Нет Заголовок заголовка Access-Control-Allow-Origin присутствует в запрошенном ресурс. Origin 'http://localhost', следовательно, не допускается.

4b9b3361

Ответ 1

Убедитесь, что вы добавили app.UseCors до app.UseMvc в свой метод Startup.Configure, потому что вам необходимо использовать промежуточное программное обеспечение CORS перед промежуточным программным обеспечением MVC.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...

    //Add CORS middleware before MVC
    app.UseCors("AllowAll");

    app.UseMvc(...);
}

В противном случае запрос будет завершен до того, как будет применено промежуточное программное обеспечение CORS. Это связано с тем, что UseMvc вызывает UseRouter, который заканчивается добавлением RouterMiddleware, и это промежуточное программное обеспечение выполняет только следующее настроенное промежуточное ПО, когда обработчик маршрута не найден для запроса.