Q1 - 如果字符'C'保存到viewstate中,那么就在呈现页面之前,Asp.Net将'C'(以及其他数据)序列化为Base64字符串。如果在回发时我发出以下代码:
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = "ABCDEF";
if (IsPostBack)
{
string viewStateString=Request["__VIEWSTATE"];
byte[] stringBytes = Convert.FromBase64String(viewStateString);
for (int i = 0; i < stringBytes.Length; i++)
{
if(stringBytes[i] == 67)
Label1.Text = ”deserialization successful”;
}
}
}
,然后FromBase64String()应该将序列化数据转换回原始格式。因此,'stringBytes'字段之一应包含十进制值67(表示ASCII字符C)。但似乎并非如此。我有什么想法吗?
Q2 - 由于String表示一组Unicode字符,我假设在上面的例子中,当从视图状态反序列化“ABCDEF”时,“ABCDEF”字符串中的每个字符都用'stringBytes'数组的两个元素表示?
再见
编辑:
我必须道歉,因为没有提到我在页面标记中将enableViewStateMac设置为false,但它仍然无法正常工作
答案 0 :(得分:3)
除了Base64编码,ASP.NET还会加密该数据。如果您在没有解密的情况下对其进行解码,则不会获得初始值。