2010-09-08 55 views
-1

我想扔在一起的屏幕刮板,並繼續獲取無效的viewstate問題。在System.Net.Web.WebClient數據下載或System.Text.UTF8Encoding.Default.GetString調用期間,似乎將WebClient DownloadData調用返回的字節數組轉換爲一個字符串 - 即正在轉換匹配url字符代碼的字符串。Url編碼的字符,ViewState和byte []數組哦我的

地址編碼的字符的字符串等%2B被轉換到它們的正常字符(+爲%2B)。

這是在WebClient類中發生的嗎?它是我將字節數組轉換爲字符串的方式嗎?

編輯:根據建議,我試圖改變從WebClient類的DownloadString呼叫

並且生成的字符串轉換了字符代碼到特定的字符所以會出現Web客戶端是罪魁禍首。編號2:

已解決。通過調用System.Web.HttpUtility.UrlEncode,我可以在將後續請求中的viewstate字符串備份到服務器之前將+轉換回%2B。我仍然不知道問題發生的位置和原因,但服務器期待包含...%2B ...的視圖狀態字符串,並且正在... + ...並確定視圖狀態無效並拋出異常。 Kudos to Jon & Henk強迫我重新思考我的假設。

+0

也許張貼代碼很多更多的環境?我很難想象WebClient如何能夠觸發ViewState錯誤。 – 2010-09-08 21:24:39

回答

1

如果您只是使用WebClient.DownloadString()而不是打開二進制流,會發生什麼情況?

+0

嗯,我們正在得到某個地方,因爲通過調用DownloadString產生的字符串已經轉換了字符代碼,所以看起來這是WebClient類正在做的事情。 – keithwarren7 2010-09-08 21:34:16

+0

@keith我以某種方式非常懷疑webclient是否做過任何轉換。你不是在某個地方做出錯誤的假設嗎?再次,這個問題可以做更多的信息(代碼,例子)。 Viewstate在哪裏進來? – 2010-09-08 21:42:20

+0

亨克,試圖找到一個保護無辜的例子... – keithwarren7 2010-09-08 21:46:57

2

如果你使用System.Text.UTF8Encoding.Default那麼你是而不是使用UTF-8 - 你使用的是系統的默認編碼。它相當於Encoding.Default,但形式更加混亂。按照Henk的建議,使用Encoding.UTF8來獲得UTF-8編碼...或使用WebClient.DownloadString

另一方面,目前尚不清楚您要下載的內容。如果你想下載真正的二進制數據那麼你不應該試圖把它轉換爲字符串。

這將有助於如果你澄清你的問題 - 嘗試提供有關什麼使的要求,什麼是有問題的,等

+0

欣賞提示,但即使在此更改後,我的原始問題仍然存在。 – keithwarren7 2010-09-08 21:30:32

+0

@ keithwarren7:你還沒有真正解釋上下文是什麼。 – 2010-09-08 21:58:22