2015-12-09 76 views
0

我的代碼:字符串中的Windows Phone太大FormUrlEncodedContent()8帖子上傳

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作爲發佈的價值。我怎樣才能繞過FormUrlEncodedContent的這個限制?

+0

你有沒有看在導線傳輸與調試器的東西,如[小提琴手(HTTP://www.fiddlertool .COM)? –

+0

因爲在 – ManzMoody

+0

之前拋出異常,所以沒有任何東西被傳輸那麼調試器告訴你的Uri是否被傳遞給'PostAsync'? –

回答

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(); 
} 
+0

不適用於HttpClient - Assembly System.Net.Http,Version = 1.5.0.0, – NBaua