代码之家  ›  专栏  ›  技术社区  ›  keithwarren7

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

  •  -1
  • keithwarren7  · 技术社区  · 15 年前

    我试着把一个屏幕刮刀放在一起,不停地出现无效的viewstate问题。在系统.Net.WebClient下载数据或System.Text.utf8编码.默认.GetString调用将WebClient DownloadData调用返回的字节数组转换为字符串-将转换与url字符代码匹配的字符串。

    工业工程

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

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

    编辑:

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

    编辑2:

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    如果你使用 System.Text.UTF8Encoding.Default 那你就是 使用UTF-8-您正在使用系统的默认编码。相当于 Encoding.Default ,但形式更混乱。使用 Encoding.UTF8 要获得UTF-8编码。。。或使用 WebClient.DownloadString 正如亨克所建议的。

    另一方面,还不清楚你想下载什么。如果你想下载 二进制数据 那你根本就不应该把它转换成字符串。

    如果你能澄清你的问题,这会有帮助的-试着提供更多的上下文,关于什么是提出请求,什么是有问题的,等等。

        2
  •  1
  •   Henk Holterman    15 年前

    如果你只是使用 WebClient.DownloadString() 而不是打开二进制流?