2016-01-05 272 views
0

我正試圖加快我本地軟件同步的過程。現在我們發送一個我們需要的每條單獨記錄的GET請求,並且API發回一個包含該記錄數據的JSON字符串,然後將其插入到本地數據庫中。這一切都有效,但它可能非常緩慢。我試圖加快速度,希望能夠發送一個JSON爲List<Dictionary<string, string>>的好方法。這將使得我可以在API端一次請求更多的數據,將它添加到列表中,並將其作爲JSON傳遞迴本地計算機。通過GET請求發送JSON列表

眼下在本地端我有:

Encoding enc = System.Text.Encoding.GetEncoding(1252); 
using (HttpClient client = new HttpClient()) 
{ 
    string basicAuth = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", usr, pwd))); 

    client.BaseAddress = new Uri(baseUrl); 
    client.DefaultRequestHeaders.Clear(); 
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", basicAuth); 
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
    string requested = JsonConvert.SerializeObject(tableList); 

    HttpResponseMessage response = client.GetAsync(syncUrl + hash + "/" + requested).Result; 

    if (!response.IsSuccessStatusCode) 
    { 
     // get the error 
     StreamReader errorStream = new StreamReader(response.Content.ReadAsStreamAsync().Result, enc); 
     throw new Exception(errorStream.ReadToEnd()); 
    } 
} 

我的控制器調用如下:

[System.Web.Http.AcceptVerbs("GET")] 
[Route("getRecords/{hash}/{requested}")] 
public HttpResponseMessage getRecords(string hash, string requested) 

每當我做這個稱呼它給我一個錯誤,它無法找到URI我甚至沒有在我的API上達到我的斷點。我如何得到這個工作,或者有更好的方法來完成我正在做的事情?

+1

如果您不發佈,您如何期望我們知道您傳遞的網址是否正確? –

回答

0

您需要對數據進行urlencode編碼,如果有任何特殊的url字符(如&符或斜槓),將會導致數據無法使用,因此您必須對其進行正確格式化。

使用類似...

string requested = Uri.EscapeDataString(JsonConvert.SerializeObject(tableList)); 

這將編碼特殊字符,以便他們可以安全地在URL上傳輸。