C# 如何在MVC6中使用HttpClient获取非原语类型

C# 如何在MVC6中使用HttpClient获取非原语类型,c#,asp.net-web-api,asp.net-core-mvc,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.

我在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;
}
公共异步任务GetData() { Blog result=null; 使用(var client=new HttpClient()) { client.BaseAddress=新Uri(“http://localhost:55792/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”); //新代码: HttpResponseMessage response=wait client.GetAsync(“api/values/1”); if(响应。IsSuccessStatusCode) { 结果=等待响应。内容。???; 返回结果; } } 返回结果; } 我不能使用它,因为DNX核心不支持WebAPI.Client NuGet包(包含
ReadAsync()
),所以我必须使用System.Net.Http

它只有3个读取功能:

  • ReadAsByteArrayAsync
  • ReadAsStreamAsync
  • ReadAsStringAsync
  • 它们都不能读取任意类型的对象


    我现在应该使用什么?

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

    ...
    string payload = await response.Content.ReadAsStringAsync();
    var obj = JsonConvert.DeserializeObject<MyClass>(payload);
    ...
    
    。。。
    字符串负载=wait response.Content.ReadAsStringAsync();
    var obj=JsonConvert.DeserializeObject(有效负载);
    ...
    
    您可以反序列化JSON,Newtonsoft是一个流行的库:

    ...
    string payload = await response.Content.ReadAsStringAsync();
    var obj = JsonConvert.DeserializeObject<MyClass>(payload);
    ...
    
    。。。
    字符串负载=wait response.Content.ReadAsStringAsync();
    var obj=JsonConvert.DeserializeObject(有效负载);
    ...
    
    未测试代码,但在此处使用选项完成代码

    公共行动结果第2部分() { 列表=新列表(); HttpClient=新的HttpClient(); var result=client.GetAsync(“http://localhost:1963/api/Example三、结果; if(结果。IsSuccessStatusCode) { list=result.Content.ReadAsAsync().result; } 返回视图(列表); }
    未测试代码,但在此处使用选项完成代码

    公共行动结果第2部分() { 列表=新列表(); HttpClient=新的HttpClient(); var result=client.GetAsync(“http://localhost:1963/api/Example三、结果; if(结果。IsSuccessStatusCode) { list=result.Content.ReadAsAsync().result; } 返回视图(列表); }
    您从WebAPI获得的数据类型是什么?JSON?XML?另外为什么不将结果读取为字符串,然后手动将其解析为适当的对象呢?数据是JSON。我打算根据
    ReadAsync()
    获取数据,因此我不必手动解析字符串。非常简单,NewtonSoft是一个流行的库:
    NewtonSoft.Json.JsonConvert.DeserializeObject(resultAsString)谢谢,它与DNX兼容。如果您将其更改为答案,我将接受。您从WebAPI获得的数据类型是什么?JSON?XML?另外为什么不将结果读取为字符串,然后手动将其解析为适当的对象呢?数据是JSON。我打算根据
    ReadAsync()
    获取数据,因此我不必手动解析字符串。非常简单,NewtonSoft是一个流行的库:
    NewtonSoft.Json.JsonConvert.DeserializeObject(resultAsString)谢谢,它与DNX兼容。如果你把它改成答案,我就接受。