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」フィールドの 1 つに 10 進値 67 (ASCII 文字 C を表す) を含める必要がありますが、そうではないようです。私が間違っていることはありますか?


Q2 - String は Unicode 文字のセットを表すため、上記の例で「ABCDEF」がビューステートから逆シリアル化されると、「ABCDEF」文字列の各文字は「stringBytes」配列の 2 つの要素で表されると思いますか?



さよなら



編集:

Page タグで enableViewStateMac を false に設定したことに言及しなかったことをお詫びしなければなりませんが、それでも機能しませんでした。

4

1 に答える 1

3

Base64 エンコーディングに加えて、ASP.NET はそのデータを暗号化します。復号化せずに復号化すると、初期値が得られません。

于 2009-04-01T19:01:46.767 に答える