【问题标题】:Urlencode large amount of text in .net 4 client C#Urlencode .net 4 客户端 C# 中的大量文本
【发布时间】:2011-10-26 13:29:01
【问题描述】:

在 .net 4 客户端配置文件中对大字符串(50k - 200k 个字符)进行 urlencode(转义)的最佳方法是什么?

System.Net.Uri.EscapeDataString() 是 limited to 32766 characters

HttpUtility.UrlEncode 在 .net 4 客户端中不可用。

编码后的字符串将作为一个 httprequest 中的参数值作为 post 传递。

(另外,SO 上是否有 .net-4-client 配置文件标签?)

【问题讨论】:

  • 有什么意义?大多数浏览器对您可以在 URL 上放置的内容的限制远低于此限制。
  • 这不会在浏览器中完成......它是一个 web api 的帖子。
  • @Oded - 他说这是一个 POST,而不是一个 GET。 RFC 中为 GET 参数指定了字符限制,但对 POST 数据没有限制(超出技术限制)。
  • @Polynomial - 那为什么是 URL 编码?
  • @Oded - 因为 URL 的编码与 POST 参数的编码相同,例如使用 %20 作为空间。

标签: c# .net-4.0 urlencode .net-client-profile


【解决方案1】:

因为 url 编码的字符串只是一个字符一个字符地编码,这意味着如果你拆分一个字符串并对这两个部分进行编码,那么你可以将它们连接起来以获得原始字符串的编码版本。

因此,只需循环遍历并一次对 30,000 个字符进行 urlencode,然后将所有这些部分连接在一起以获得编码字符串。

我会回应其他人的观点,即使用 multipart/form-data 的内容类型可能会更好。 http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4 解释了您不知道的差异。您选择这两者中的哪一个对目的地影响不大,因为两者都应该被目标完全理解。

【讨论】:

  • 我知道多部分帖子,但 api 不支持它。我想我只需要拆分它并使用 System.Uri.EscapeDataString() 进行编码。
【解决方案2】:

我建议考虑使用 MIME 格式来发布您的数据。无需编码(可能是 base64 编码除外),并且可以让您不受限制。

【讨论】:

    【解决方案3】:

    您可以使用 StringBuilder 手动对其进行编码,但这会使您的传输量增加三倍:

    string EncodePostData(byte[] data)
    {
        var sbData = new StringBuilder();
        foreach(byte b in data)
        {
            sbData.AppendFormat("%{0:x2}", b);
        }
        return sbData.ToString();
    }
    

    然而,标准方法只是提供一个 MIME 类型和Content-Length 标头,然后发送原始数据。

    【讨论】:

    • 这会影响性能...没有内置函数吗?
    • 不,因此我建议使用标准方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2016-02-29
    • 2011-04-08
    相关资源
    最近更新 更多