Изменить строку VIEWSTATE перед ее десериализацией - PullRequest
0 голосов
/ 30 июня 2010

Причина этого заключается в том, что существует особая проблема, когда восклицательные знаки, за которыми следуют пробелы, помещаются в VIEWSTATE некоторыми случайными маршрутизаторами / сервером / чем-то другим.

После их удаления VIEWSTATE работает нормально иможет быть десериализовано (что подтверждается довольно интересной программой View State Decoder 2).

Итак, я хочу

  1. перехватить ошибку, которая возникает
  2. проверьте VIEWSTATE для этой проблемы
  3. измените VIEWSTATE (удалите!)
  4. попробуйте снова проанализировать VIEWSTATE

Я работаю надпопытка переопределить LoadPageStateFromPersistenceMedium в System.Web.UI.Page и применить магию оттуда.Все еще работаем над этим ...

1 Ответ

0 голосов
/ 30 июня 2010

Попробуйте следующие методы: SavePageStateToPersistenceMedium и LoadPageStateFromPersistenceMedium, которые вы можете переопределить на своей странице. Там вы можете перехватить объект VIEWSTATE, который отображается на странице или происходит из скрытого поля на странице.

Ура! * * 1005

Обновление - однажды я использовал это для сжатия 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));
    }
...