首页 > 解决方案 > 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"
            }
        }
    ]
}

标签: c#asp.net

解决方案


在继续之前安装 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;
}

推荐阅读