Core 2.1 отказывается отвечать с помощью Access-Control-Expose-Headers: * - PullRequest
0 голосов
/ 14 сентября 2018

Я, должно быть, делаю что-то не так, но не могу понять;кажется, это проблема CORS из того, что я могу сказать.Мне нужно предоставить Access-Control-Expose-Headers: * любому источнику, но ядро ​​dotnet 2.1 не выполняет то, что я ожидаю.

Соответствующий код Startup.cs:

        public void ConfigureServices(IServiceCollection services)
        {
            //Mapping settings to POCO and registering with container
            var settings = new AppSettings.ReportStorageAccountSettings();
            Configuration.Bind(nameof(AppSettings.ReportStorageAccountSettings), settings);

            services.AddCors(options =>
            {
                options.AddPolicy("AllowAll",
                    builder =>
                    {
                        builder
                            .AllowAnyHeader()
                            .AllowAnyMethod()
                            .AllowAnyOrigin()
                            .AllowCredentials();
                    });
            });
            services.AddSingleton(settings);
            services.AddApiVersioning();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseCors("AllowAll");
            app.UseHttpsRedirection();
            app.UseMvc();
        }

Это приложение размещено в Azure иЯ добавил запись * в настройки CORS в Azure просто для хорошей меры.Теперь, когда клиентское приложение (которое также размещается в Azure) делает пост-запрос, заголовки не доступны через JS, а Access-Control-Expose-Headers: * отсутствует в ответе.Тем не менее, я вижу заголовки при проверке ответа сети и при использовании Fiddler.Я пробовал Axios и Jquery для доступа к заголовкам, чтобы исключить любые проблемы с JS.Что я здесь не так делаю?

В контроллере я отвечаю:

 Response.Headers.Add("Location", $"api/someLocation");
 return StatusCode(StatusCodes.Status202Accepted);

1 Ответ

0 голосов
/ 14 сентября 2018

Когда вы используете AllowAnyHeader на CorsPolicyBuilder, вы устанавливаете заголовок Access-Control-Allow-Headers, который используется только для предварительно выданных запросов . Для установки Access-Control-Expose-Headers необходимо использовать WithExposedHeaders. Вот полный пример:

services.AddCors(options =>
{
    options.AddPolicy("AllowAll", builder =>
    {
        builder.AllowAnyHeader()
               .AllowAnyMethod()
               .AllowAnyOrigin()
               .AllowCredentials()
               .WithExposedHeaders("Location"); // params string[]
    });
});
...