【问题标题】:Cookie not appended in ASP.NET Core?Cookie 未附加在 ASP.NET Core 中?
【发布时间】:2020-08-04 23:50:34
【问题描述】:

我尝试将 cookie 添加到 ASP.NET Core 3.1 Web 应用程序的响应中。问题是 cookie 没有附加到响应中。这是代码:

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");
            });

        });

       
    }

这就是我在浏览器中看到的:

我尝试调试应用程序,调试在附加 cookie 方法处停止,没有引发异常。不显示消息Ending。在浏览器(Chrome)中没有存储 cookie,我检查了应用程序/cookies,即使在重新加载后也没有。据我所知,如果 cookie 设置为必需,我不需要添加 Cookie 策略选项。从我在其他帖子中读到的内容,浏览器可能会选择哪些 cookie 被视为必不可少,即使您将其设置为必不可少。会是这样吗?

【问题讨论】:

  • 我在 append 函数周围添加了一个 try/catch,这是我收到的错误:异常:无法修改响应标头,因为响应已经开始。在 Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.ThrowIfReadOnly() 在 Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.set_Item(String key, StringValues value) 在 Microsoft.AspNetCore.Http.ResponseCookies.Append(String key, String value, CookieOptions 选项)在 WebApplication1.Startup.c.b__1_2>d.MoveNext() 有谁知道问题是什么?

标签: asp.net-core web cookies


【解决方案1】:

在我将 cookie 附加到响应后,cookie 没有附加到响应中,它们也没有添加到 Chrome 中的 cookie 数据库中。问题是,在 ASP.NET Core 写入响应正文后,它不再写入标头。因此,我在另一个端点上有一个先前的中间件,它正在将字符串写入消息正文,并且即使 cookie 端点不同,它们仍然没有写入标头,因为之前的中间件正在响应正文中写入数据。另一个问题是 append 方法在 Visual Studio 中没有抛出异常,它只是停在附加的 cookie 部分。我必须添加一个 try/catch 才能看到异常:无法修改响应标头,因为响应已经开始。在我删除所有中间件并只留下附加cookie方法之后,它起作用了。所以需要注意的是,在将响应写入响应主体之前,必须在中间件管道的开始进行所有标头修改。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2021-12-14
    • 2021-12-16
    • 2016-07-10
    相关资源
    最近更新 更多