因此,我尝试将GET请求与c#一起使用,但实际上没有任何效果。 我想使用站点https://covid19.mathdro.id/api作为测试,以查看是否可以从那里获取信息并在Windows窗体中使用它。但是我似乎不知道如何。我发现的唯一指南并不是真的那么有用,只是让我更加困惑。有人可以帮我吗?
我尝试将HttpClient与JSON.net结合使用,但感到困惑。 自从我从未使用c#处理Python之外的c#中的HTTP GET请求以来,已经尝试了两个小时。
答案 0 :(得分:1)
安装“ Newtonsoft.Json” nuget软件包。
async Task<JToken> GetREST(string uri)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(uri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// HTTP GET
HttpResponseMessage response = await client.GetAsync("");
if (response.IsSuccessStatusCode)
{
var jsonData = await response.Content.ReadAsStringAsync();
return JToken.Parse(jsonData);
}
}
return null;
}
async private void button1_Click(object sender, EventArgs e)
{
var jObj = await GetREST("https://covid19.mathdro.id/api");
var confirmed = jObj["confirmed"];
Console.WriteLine("Confirmed:" + confirmed["value"]);
var confirmedJSON = await GetREST(confirmed["detail"].ToString());
Console.WriteLine(confirmedJSON);
}
答案 1 :(得分:1)
除了可接受的答案外,您始终可以通过反序列化将数据作为对象来处理-与使用fileText
等相比,我更喜欢这种方法,因为它往往很容易处理对象(通常更少样板以从响应中提取数据位。
JToken
要反序列化的对象如下所示:
public async Task<CovidData> GetCovidData(string uri)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(uri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("");
if (response.IsSuccessStatusCode)
{
var jsonData = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<CovidData>(jsonData);
}
}
return null;
}
它确实确实取决于首选项和您的用例。
示例:
public class CovidData
{
public ValueDetailPair Confirmed { get; set; }
public ValueDetailPair Recovered { get; set; }
public ValueDetailPair Deaths { get; set; }
}
public class ValueDetailPair
{
public int Value { get; set; }
// If you need the link to the detail it would be deserialized to this string member
public string Detail { get; set; }
}