c# - ASP.NET 从 HttpResponseMessage 获取结果计数
问题描述
我有一个返回数据的工作 HttpResponseMessage,我的问题是如何计算数据?
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://api.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = httpClient.GetAsync("v1/registrants/search?email=" + email).Result;
return response.Content.ReadAsStringAsync().Result;
}
请帮忙。
这是它返回的内容:
{
"links" : {
"next" : null
},
"items" : [ ]
}
如果 items 为空,则表示计数应为 0。
这就是它不为空时返回的内容
{
"links": {
"next": null
},
"items": [
{
"registrantId": 31436518,
"personalId": 38464352,
"firstName": "FirstName",
"lastName": "LastName",
"email": "email@domain.com",
"address": ", Stoney Creek, , 90210, ",
"phone": "9053341529",
"_links": {
"self": "/registrants/31436518"
}
}
]
}
解决方案
在继续之前安装 Nuget Newtonsoft.Json 。
1)将序列化的字符串响应反序列化为一个JObject
public async Task<JObject> FetchData()
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://api.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = httpClient.GetAsync("v1/registrants/search?email=" + email).Result;
string response = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<JObject>(response);
}
}
2) 调用它的方法,如果不存在.Count()
,则使用安全评估运算符与空合并运算符的组合来回退。items
public async Task<int> CalculateCount()
{
JObject responseObject = await FetchData();
return responseObject["items"]?.Count() ?? 0;
}
推荐阅读
- php - 我写了下面的代码,我该如何清理它?谁能帮我写得更好?
- django - 警告:未定义主键类型时使用自动创建的主键,默认为 'django.db.models.AutoField'
- python - 关于 cupy-cuda100 的 CompileException
- javascript - 需要使用节点 js 来自多个输出的单个数组
- c# - 如何在 C# 中获取变量并将其存储在数据库中?
- angular - 如何使 ngx-mat-intl-tel-input 的搜索字段成为焦点?
- amazon-web-services - 如何升级 CDK 引导程序?
- flutter - 移动到其他页面时无法保持底部导航栏颤动
- javascript - 像 (if:) 这样的更改需要在它们之间使用 + 组合
- c# - 锁定一个对象和所有子对象