String too large for FormUrlEncodedContent() in Windows Phone 8 Post 上传
String too large for FormUrlEncodedContent() in Windows Phone 8 Post upload
我的代码:
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
抛出异常:
" Invalid URI: The Uri string is too long".
重要的是服务器期望使用 "parameter" 作为 post 键和 json 作为 post 值的确切格式。如何绕过 FormUrlEncodedContent
的限制?
我使用以下替换 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();
}
我的代码:
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
抛出异常:
" Invalid URI: The Uri string is too long".
重要的是服务器期望使用 "parameter" 作为 post 键和 json 作为 post 值的确切格式。如何绕过 FormUrlEncodedContent
的限制?
我使用以下替换 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();
}