字符串太大,无法在Windows Phone 8中上传FormUrlEncodedContent()

时间:2015-12-09 11:46:02

标签: c# windows-phone-8 http-post

我的代码:

string json = BuildJson(uploadItem);

using (var client = new HttpClient())
{
    var values = new List<KeyValuePair<string, string>>();
    values.Add(new KeyValuePair<string, string>("parameter", json));

    var content = new FormUrlEncodedContent(values);
    var response = await client.PostAsync(App.Current.LoginUrl, content);

    var responseString = await response.Content.ReadAsStringAsync();
}

我的json字符串包含base64编码的图像,因此FormUrlEncodedContent会抛出异常:

  

“无效的URI:Uri字符串太长”。

重要的是服务器期望使用“参数”作为帖子密钥并将json作为post值。如何绕过FormUrlEncodedContent的限制?

1 个答案:

答案 0 :(得分:0)

我用以下替换FormUrlEncodedContent的方法解决了这个问题:

// URI Escape JSON string
var content = EscapeDataString(json);

private string EscapeDataString(string str)
{
    int limit = 2000;

    StringBuilder sb = new StringBuilder();
    int loops = str.Length / limit;

    for (int i = 0; i <= loops; i++)
    {
        if (i < loops)
        {
            sb.Append(Uri.EscapeDataString(str.Substring(limit * i, limit)));
        }
        else
        {
            sb.Append(Uri.EscapeDataString(str.Substring(limit * i)));
        }
    }

    return sb.ToString();
}