在反序列化之前修改VIEWSTATE字符串

时间:2010-06-30 12:19:14

标签: asp.net c#-3.0 viewstate

原因是有一个特定的问题,一些随机的公司路由器/服务器/东西在VIEWSTATE中放置了后面跟有空格的惊叹号。

删除它们之后,VIEWSTATE很好并且可以反序列化(由View State Decoder 2确认,这是一个非常酷的程序)。

所以,我想做的是

  1. 捕捉发生的错误
  2. 查看此问题的VIEWSTATE
  3. 修改VIEWSTATE(删除!)
  4. 尝试再次解析VIEWSTATE
  5. 我正在尝试覆盖System.Web.UI.Page中的 LoadPageStateFromPersistenceMedium 并从那里开始工作。还在努力......

1 个答案:

答案 0 :(得分:0)

尝试使用以下方法:SavePageStateToPersistenceMediumLoadPageStateFromPersistenceMedium,您可以在页面中覆盖这些方法。在那里,您可以截取在页面中呈现的VIEWSTATE或来自页面中隐藏字段的内容。

干杯!

更新 - 我曾经用它来压缩VIEWSTATE,所以也许你可以根据自己的需要进行更改。以下是压缩值从页面加载的方式(在您的情况下是带有空格的那个),解压缩的值被反序列化为实际的VIEWSTATE:

    protected override object LoadPageStateFromPersistenceMedium()
    {
        string vsString = Request.Form["__COMPRESSEDVIEWSTATE"];
        byte[] bytes = Convert.FromBase64String(vsString);
        bytes = Compression.Decompress(bytes);
        return formatter.Deserialize(Convert.ToBase64String(bytes));
    }