C# Url编码字符、ViewState和byte[]数组

C# Url编码字符、ViewState和byte[]数组,c#,.net,webclient,C#,.net,Webclient,我正试图拼凑一个屏幕刮板,并不断得到无效的viewstate问题。在System.Net.WebClient下载数据或System.Text.UTF8Encoding.Default.GetString调用将WebClient下载数据调用返回的字节数组转换为字符串的过程中,似乎正在转换与url字符代码匹配的字符串 即 Url编码的字符串(如%2B)正在转换为%2B的普通字符+ 这是在WebClient类中发生的吗?这是我将字节数组转换为字符串的方式吗 编辑: 根据建议,我尝试从WebClient

我正试图拼凑一个屏幕刮板,并不断得到无效的viewstate问题。在System.Net.WebClient下载数据或System.Text.UTF8Encoding.Default.GetString调用将WebClient下载数据调用返回的字节数组转换为字符串的过程中,似乎正在转换与url字符代码匹配的字符串

Url编码的字符串(如%2B)正在转换为%2B的普通字符+

这是在WebClient类中发生的吗?这是我将字节数组转换为字符串的方式吗

编辑:

根据建议,我尝试从WebClient类更改为DownloadString调用,结果字符串已将字符代码转换为特定字符,因此WebClient似乎是罪魁祸首

编辑2:


解决了。通过调用System.Web.HttpUtility.UrlEncode,我能够在后续请求中将viewstate字符串发送回服务器之前将+转换回%2B。我仍然不知道问题发生的位置和原因,但服务器希望一个viewstate字符串包含…%2B。。。而且正在变得…+。。。以及确定viewstate无效并引发异常。感谢Jon&Henk迫使我重新思考我的假设。

如果你只是使用WebClient.DownloadString而不是打开二进制流,会发生什么

如果使用System.Text.UTF8Encoding.Default,则不是使用UTF-8-而是使用系统的默认编码。它相当于Encoding.Default,但形式更加混乱。使用Encoding.UTF8获取UTF-8编码。。。或者按照Henk的建议使用WebClient.DownloadString

另一方面,不清楚您要下载什么。如果您试图下载geuinely二进制数据,那么根本不应该尝试将其转换为字符串


如果你能澄清你的问题,这会有所帮助——试着提供更多关于提出请求的内容、存在问题的内容等。

也许可以发布代码?我很难想象WebClient是如何触发ViewState错误的。感谢您提供的提示,但即使在这次更改之后,我原来的问题仍然存在。@keithwarren7:您还没有真正解释上下文是什么。我们正在取得进展,因为调用DownloadString得到的字符串已将字符代码转换为这似乎是WebClient类正在做的事情。@keith我很怀疑WebClient是否会进行任何转换。你不是在什么地方做了一个错误的假设吗?同样,这个问题需要更多的信息代码和示例。Viewstate从何而来?