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

ASP.NET MVC中HttpContext.Session.TryGetValue返回乱码求助

解决ASP.NET MVC中Session存储用户名后读取乱码的问题

问题分析

你遇到的乱码本质是字节数组未正确解码为字符串:

  • 存储时你用Encoding.Unicode.GetBytes(username)将字符串转为UTF-16字节数组存入Session
  • 读取时直接取出byte数组并输出,ASP.NET会默认将byte数组序列为Base64字符串(也就是你看到的UwBOAEIAUwA=),而非解码回原字符串

修正方案

修改读取Session的代码,将取出的byte数组用对应编码解码为字符串:

错误的读取代码:

if (!HttpContext.Session.TryGetValue("authentication", out username)) {
    return RedirectToAction("Login", "Account");
}

正确的读取代码:

// 先取出字节数组
if (!HttpContext.Session.TryGetValue("authentication", out byte[] usernameBytes))
{
    return RedirectToAction("Login", "Account");
}
// 用存储时的编码(Unicode/UTF-16)解码为字符串
var username = Encoding.Unicode.GetString(usernameBytes);

关键注意点

  • 存储和读取必须使用完全一致的编码:如果存储时改用Encoding.UTF8.GetBytes,读取时就要对应使用Encoding.UTF8.GetString,否则仍会出现乱码
  • 避免直接输出byte数组,必须显式解码为字符串后再使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:55:20