如何使用HttpClient在MVC 6中获取非原始类型

时间:2015-09-18 11:09:33

标签: c# asp.net-web-api asp.net-core-mvc

我在MVC 6项目中有以下WebAPI客户端代码:

public async Task<Blog> GetData()
{
    Blog result = null;

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:55792/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        // New code:
        HttpResponseMessage response = await client.GetAsync("api/values/1");
        if (response.IsSuccessStatusCode)
        {
            result = await response.Content.???;
            return result;
        }
    }
    return result;
}

我无法使用它,因为DNX核心不支持WebAPI.Client NuGet包(包含ReadAsync<MyClass>())所以我必须使用System.Net.Http。

它只有3个阅读功能:

  1. ReadAsByteArrayAsync
  2. ReadAsStreamAsync
  3. ReadAsStringAsync
  4. 他们都不能读取任意类型的对象。

    我现在应该使用什么?

2 个答案:

答案 0 :(得分:3)

你可以反序列化JSON,Newtonsoft是一个流行的库:

...
string payload = await response.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeObject<MyClass>(payload);
...

答案 1 :(得分:2)

未经过测试的代码,但此处使用download选项

完成了代码
           public ActionResult Part2()
            {
                List<Employee> list = new List<Employee>();
                HttpClient client = new HttpClient();
                var result = client.GetAsync("http://localhost:1963/api/Example").Result;
                if (result.IsSuccessStatusCode)
                {
                    list = result.Content.ReadAsAsync<List<Employee>>().Result;
                }
                return View(list);
            }