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

如何在ASP.NET Core中存储对象到Cookie并保留原始JSON值

在ASP.NET Core中如何避免Cookie值被编码,直接存储原始JSON?

问题场景

我有一个想要存储到响应Cookie中的类,代码实现如下:

public IActionResult Get()
{
    var data = JsonConvert.SerializeObject(new DeviceModel
    {
        Group = "TEST"
    });

    HttpContext.Response.Cookies.Append("dv-v3", data);

    return Ok();
}

public class DeviceModel
{
    [JsonProperty(PropertyName = "g")]
    public string Group { get; set; }

    [JsonProperty(PropertyName = "platform")]
    public string Platform { get; set; }
}

但存储后Cookie的值被URL编码为:

dv-v3=%7B%22g%22%3A%22TEST%22%2C%22platform%22%3Anull%7D; path=/

我希望Cookie的值保持为原始JSON格式:

{"g":"TEST","platform":null}

解决方案

ASP.NET Core里Response.Cookies.Append方法默认会对Cookie值做URL编码,要跳过编码,使用带CookieOptions的重载,给Encode属性设置一个直接返回原字符串的自定义编码器即可。

修改后的代码如下:

public IActionResult Get()
{
    var data = JsonConvert.SerializeObject(new DeviceModel
    {
        Group = "TEST"
    });

    var cookieOptions = new CookieOptions
    {
        // 自定义编码器,直接返回原始字符串,不做编码处理
        Encode = value => value
    };

    HttpContext.Response.Cookies.Append("dv-v3", data, cookieOptions);

    return Ok();
}

public class DeviceModel
{
    [JsonProperty(PropertyName = "g")]
    public string Group { get; set; }

    [JsonProperty(PropertyName = "platform")]
    public string Platform { get; set; }
}

注意事项

  • 虽然可以跳过编码,但要遵循Cookie的RFC规范:Cookie值本身不允许包含空格、逗号、分号等特殊字符,原始JSON里的双引号在多数现代浏览器中能正常解析,但部分旧浏览器或代理服务器可能出现解析异常。
  • 若必须存储原始JSON,需确认业务场景下所有客户端都能正确处理未编码的Cookie值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:43:21