2016-01-05 3 views
0

Я пытаюсь ускорить процесс локальной синхронизации программного обеспечения. Прямо сейчас мы отправляем запрос GET для каждой отдельной записи, который нам нужен, и API отправляет обратно строку JSON, содержащую данные записей, которые затем вставляются в локальную базу данных. Это все работает, однако это может быть утомительно медленным. Я пытаюсь ускорить это, и надеялся, что хороший способ сделать это - отправить JSON List<Dictionary<string, string>>. Это сделает так, что я могу запросить гораздо больше данных одним выстрелом на стороне API, добавить его в список и передать его как JSON на локальный компьютер.Отправить список JSON через GET Request

Прямо сейчас на локальной стороне у меня есть:

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

Как вы ожидаете, что мы узнаем, правильно ли вы передаете Url, или нет, если вы его не публикуете? –

ответ

0

Вам необходимо установить urlencode данные, если есть какие-либо специальные символы url (например, амперсанд или косая черта), это сделает непригодными для использования данные, поэтому вы должны правильно его отформатировать.

использовать что-то вроде ...

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

Это будет кодировать специальные символы таким образом они могут быть переданы надежно на URL.

Смежные вопросы