通过GET请求发送JSON列表

本文关键字:JSON 列表 GET 请求 通过 | 更新日期: 2023-09-27 18:28:54

我正试图加快本地软件同步的进程。现在,我们为所需的每个单独记录发送一个GET请求,API发回一个包含记录数据的JSON字符串,然后将其插入本地数据库。这一切都是可行的,但它可能会非常缓慢。我正在努力加快速度,并希望一个好的方法是发送一个List<Dictionary<string, string>>的JSON。这样,我就可以在API端一次请求更多的数据,将其添加到列表中,并将其作为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上找到断点。我该如何做到这一点,或者有更好的方法来完成我正在做的事情吗?

通过GET请求发送JSON列表

您需要对数据进行url编码,如果有任何特殊的url字符(如"与"或"斜杠"),它将导致数据不可用,因此您必须对其进行url编码才能正确格式化。

使用类似…的内容。。。

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

这将对特殊字符进行编码,以便它们可以在URL上安全传输。