0



Q1 - 如果字符“C”被保存到视图状态中,那么就在呈现页面之前,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”数组的两个元素表示?



再见



编辑:

我必须为没有提到我确实在 Page 标记中将 enableViewStateMac 设置为 false 表示歉意,但它仍然不起作用

4

1 回答 1

3

除了 Base64 编码之外,ASP.NET 还会加密该数据。如果您在不解密的情况下对其进行解码,您将无法获得初始值。

于 2009-04-01T19:01:46.767 回答