You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# & .NET 7.0无法访问Cookie中数据的问题求助

解决Razor Pages中前端设置的Cookie无法被C#读取的问题

问题分析

开发者工具能看到Cookie但后端C#读取为空,核心原因有两个:

  1. Cookie值未编码:JSON序列化后的字符串包含引号、逗号等特殊字符,直接存入会被浏览器截断,导致后端读取到不完整或空值。
  2. SameSite属性缺失:现代浏览器默认采用SameSite=Lax策略,未显式声明时,可能在页面跳转或请求过程中Cookie未被正确传递到后端。

解决方案

1. 修改前端Cookie设置逻辑

更新setCookie函数,对Cookie值进行URL编码,并显式添加SameSite属性:

function setCookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    // 编码Cookie值,避免特殊字符导致截断
    var encodedValue = encodeURIComponent(value);
    // 显式设置SameSite属性,适配现代浏览器
    var newCookie = `${name}=${encodedValue || ""}${expires}; path=/; SameSite=Lax`;
    console.log(newCookie);
    document.cookie = newCookie;
}

2. 修改后端Cookie读取逻辑

在C#代码中对读取到的Cookie值进行URL解码后,再执行JSON反序列化:

public List<CartItem> CartItems { get; set; }

public void OnGet()
{
    CartItems = GetCartItems();
}

private List<CartItem> GetCartItems()
{
    var cartCookie = Request.Cookies["cart"];
    Console.WriteLine($"cartCookie: {cartCookie}");

    if (!string.IsNullOrEmpty(cartCookie))
    {
        try
        {
            // 解码Cookie值
            var decodedCookie = Uri.UnescapeDataString(cartCookie);
            return JsonConvert.DeserializeObject<List<CartItem>>(decodedCookie);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error parsing cart cookie: {ex.Message}");
        }
    }

    return new List<CartItem>();
}

3. 确认CookiePolicy配置

检查Program.cs中的Cookie策略配置,确保允许Cookie被后端读取:

builder.Services.Configure<CookiePolicyOptions>(options =>
{
    // 无需用户同意Cookie时设置为false
    options.CheckConsentNeeded = context => false;
    options.MinimumSameSitePolicy = SameSiteMode.Lax;
});

// 确保在UseRouting之后、UseAuthorization之前调用
app.UseCookiePolicy();

验证步骤

  1. 清除浏览器中已有的旧Cookie,重新添加商品到购物车。
  2. 访问/Cart页面,查看控制台输出,确认cartCookie已读取到有效内容。
  3. 检查CartItems是否完成正确的反序列化。

内容的提问来源于stack exchange,提问作者muazfurkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:40:35