2010-09-08 51 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