我正在尝试将屏幕抓取器放在一起并继续获得无效的viewstate问题。看来,在System.Net.WebClient下载数据或System.Text.UTF8Encoding.Default.GetString调用时,将WebClient DownloadData调用返回的字节数组转换为字符串 - 匹配url字符代码的字符串正在被转换
即
Url编码的字符字符串(如%2B)正在转换为正常字符(+表示%2B)。
这是否发生在WebClient类中?这是我将字节数组转换为字符串的方式吗?
编辑:
根据建议,我尝试从WebClient类更改为DownloadString调用,结果字符串已将字符代码转换为特定字符,因此WebClient似乎是罪魁祸首。
编辑2:
解决。通过调用System.Web.HttpUtility.UrlEncode,我可以在将视图状态字符串发送回后续请求中的服务器之前将+转换回%2B。我仍然不知道问题发生的地点和原因,但是服务器期待一个包含...%2B的视图状态字符串...并且正在获取... + ...并确定视图状态无效并抛出异常。感谢Jon& Henk强迫我重新考虑我的假设。
答案 0 :(得分:2)
如果您使用System.Text.UTF8Encoding.Default
,那么您使用UTF-8 - 您正在使用系统的默认编码。它相当于Encoding.Default
,但形式更加混乱。使用Encoding.UTF8
获取UTF-8编码...或使用WebClient.DownloadString
作为Henk建议。
另一方面,目前尚不清楚您要下载的是什么。如果您正在尝试下载 geuinely binary data ,那么您根本不应该尝试将其转换为字符串。
如果你澄清一下你的问题会有所帮助 - 尝试提供更多关于提出请求的内容,有什么问题等的背景信息。
答案 1 :(得分:1)
如果您只使用WebClient.DownloadString()
而不是打开二进制流,会发生什么?