ASP.NET Core中asp-for对字节数组的编码及解码方法问询
如何解码ASP.NET生成的RowVersion HTML实体编码值
嘿,我来帮你搞定这个解码问题!
问题的根源其实很简单:ASP.NET在生成hidden输入框的内容时,会自动对Base64字符串进行HTML编码——你看到的+其实就是Base64里的+号被转义后的HTML实体。直接用Convert.FromBase64String处理带HTML实体的字符串肯定会报错,因为这些实体不属于有效的Base64字符集。
解决办法分两步走:
先还原HTML编码的Base64字符串
用.NET自带的工具类把HTML实体转换回原始的Base64字符。你可以用System.Net.WebUtility.HtmlDecode(不需要额外引用System.Web,更适合现代.NET项目)或者System.Web.HttpUtility.HtmlDecode(针对传统ASP.NET项目)。示例代码:
// 从页面获取的编码值 var encodedRowVersion = "AAAAAAAE+uc="; // 解码HTML实体,得到原始Base64字符串 var rawBase64 = System.Net.WebUtility.HtmlDecode(encodedRowVersion); // 此时rawBase64的值是 "AAAAAAAE+uc="解码Base64字符串为RowVersion字节数组
现在就可以正常使用Convert.FromBase64String来解码了:byte[] rowVersionBytes = Convert.FromBase64String(rawBase64); // 得到的字节数组就是你原始的0x000000000004FAE7对应的字节:[0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFA, 0xE7]
验证一下:把AAAAAAAE+uc=解码成字节数组,确实会得到你原始的RowVersion值,完美匹配!
内容的提问来源于stack exchange,提问作者Roman Pokrovskij
相关产品推荐
相关产品推荐

