close
ViewState大概ASP.NET裡最偉大的發明,因為它提供與WinForm一致的開發經驗,讓寫單機AP的開發人員也能無痛(?)轉移到Web上的開發。一般的ASP.NET網頁,在原始碼中會有如下圖的hidden value。
其實ViewState是以Base64編碼,還原後可以看見部份文字,實際上它是將物件序列化後再轉為Base64字串,接下來示範如何將ViewState還原。
Demo程式介面,上面的TextBox是ViewState值,下面則是顯示還原後的結果。
要將ViewState非常簡單,只要使用LosFormatter就能輕鬆辦到。但有一點比較麻煩,就是還原後的物件型別沒辦法事先知道,照慣例通常是Pair物件,但Pair底下的First及Second屬性,型別還是未知。
在這裡使用的方法稍微暴力了些,就是儘量列出可能的型別,然後再將值印出。
對於Pair型別的處理,採用遞迴的方式,配合前面的VisitObj方法,一層一層的往下找。
雖然儘量列出可能的型別,但總是會有沒處理到的型別,這時就利用Reflection將物件的屬性及值全部找出來。
最後,提供一個網址讓大家測試,這個網站是國外的網友製作,一樣能還原ViewState,但能處理的型別較少。
http://ignatu.co.uk/ViewStateDecoder.aspx
參考資料
全站熱搜