FormUrlEncodedContent
內部使用Uri.EscapeDataString
:從反射,我可以看到,這種方法有限制請求長度的常量。
可能的解決方案是通過使用System.Net.WebUtility.UrlEncode
(.net 4.5)來繞過此限制創建FormUrlEncodedContent
的新實現。
public class MyFormUrlEncodedContent : ByteArrayContent
{
public MyFormUrlEncodedContent(IEnumerable<KeyValuePair<string, string>> nameValueCollection)
: base(MyFormUrlEncodedContent.GetContentByteArray(nameValueCollection))
{
base.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
}
private static byte[] GetContentByteArray(IEnumerable<KeyValuePair<string, string>> nameValueCollection)
{
if (nameValueCollection == null)
{
throw new ArgumentNullException("nameValueCollection");
}
StringBuilder stringBuilder = new StringBuilder();
foreach (KeyValuePair<string, string> current in nameValueCollection)
{
if (stringBuilder.Length > 0)
{
stringBuilder.Append('&');
}
stringBuilder.Append(MyFormUrlEncodedContent.Encode(current.Key));
stringBuilder.Append('=');
stringBuilder.Append(MyFormUrlEncodedContent.Encode(current.Value));
}
return Encoding.Default.GetBytes(stringBuilder.ToString());
}
private static string Encode(string data)
{
if (string.IsNullOrEmpty(data))
{
return string.Empty;
}
return System.Net.WebUtility.UrlEncode(data).Replace("%20", "+");
}
}
要發送大內容,最好使用StreamContent。
Post'StreamContent' –
我很困惑......當你使用任何類型的'HttpContent'(包括'FormUrlEncodedContent')時,數據在主體中,而不在Url ..所以你爲什麼要在Url中看到數據? –
當我撥打以下電話時, dict.Add(new KeyValuePair(「Base64FileData」,image)); (其中image是base 64轉換後的字符串)。拋出異常。 –
Muraad