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
相关产品推荐
相关产品推荐

