Cook ie не добавляется в ASP. NET Core? - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь добавить файлы cookie в ответ в веб-приложении ASP. NET Core 3.1. Проблема в том, что повар ie не добавляется к ответу. Это код:

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

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGet("/", async context =>
            {
                await context.Response.WriteAsync("Hello World!\n");

                string cookieValueFromContext = context.Request.Cookies["hello"];

                await context.Response.WriteAsync($"Response: {cookieValueFromContext}");

                context.Response.Cookies.Append("hello", "cookie", new CookieOptions
                {
                    MaxAge = TimeSpan.FromDays(10),
                    IsEssential = true

                });

                await context.Response.WriteAsync("Ending");
            });

        });

       
    }

И вот что я вижу в браузере:

введите описание изображения здесь

Я пытался отладить приложение, отладка останавливается с помощью метода append cook ie, исключение не возникает. Сообщение Ending не отображается. В браузере (Chrome) повар ie не сохраняется, я проверил Application / Cookies, даже после перезагрузки. Насколько мне известно, мне не нужно добавлять параметр политики Cook ie, если Cook ie установлен как необходимый. Из того, что я читал в других сообщениях, браузер может выбрать, какие файлы cookie считать необходимыми, даже если вы укажете их как важные. Может ли это быть так?

1 Ответ

0 голосов
/ 04 августа 2020

После того как я добавил файлы cookie к ответу, файлы cookie не были добавлены в ответ и не были добавлены в базу данных файлов cookie в Chrome. Проблема в том, что после того, как ядро ​​ASP. NET записывает в теле ответа, оно больше не записывается в заголовки. Итак, у меня было предыдущее промежуточное ПО на другой конечной точке, которое записывало строку в тело ответа. сообщение, и даже если конечная точка файлов cookie была другой, они все равно не были записаны в заголовок из-за того, что предыдущее промежуточное ПО записывало данные в тело ответа. Другая проблема заключается в том, что метод append не генерировал исключение в Visual Studio, он просто остановился на добавлении файлов cookie. Мне пришлось добавить try / catch, чтобы увидеть исключение: заголовки ответа не могут быть изменены, потому что ответ уже начался. После того, как я удалил все промежуточное ПО и оставил только метод append cook ie, он заработал. Следует отметить, что все изменения заголовков должны быть выполнены в самом начале конвейера промежуточного программного обеспечения, прежде чем ответ будет записан в теле ответ.

...