尝试使用异步等待模式

时间:2017-07-04 20:36:40

标签: c# asynchronous async-await

我正在尝试使用async await样式调用此API但存在一些问题。

public async Task<User> GetUser(int userId)
{
    User user = null;
    HttpResponseMessage response = await client.GetAsync("/user/...");
    if(response.IsSuccessStatusCode)
    {
        var result = await response.Content.ReadAsStringAsync();
        user = JsonConvert.DeserializeObject<User>(result);
    }

    return user;
}

我在控制台应用中调用上述方法:

var user = apiClient.GetUser(123);

Console.WriteLine($"user result is {user.Result.UserId}");

我收到错误:

  

类型&#39; System.NullReferenceException的未处理异常   对象引用未设置为实例..

我的代码段遵循最佳做法是否有问题?

使用Postman进行测试时,我的端点工作正常。

更新

我的GetUser方法的接口是:

Task<User> GetUser(int userId);

2 个答案:

答案 0 :(得分:0)

我做了以下操作,我也得到了一个错误,当我得到值时,我也得到了结果 response.Content.ReadAsStringAsync()。结果; ,但你也应该调试和检查你真的得到了一个json值。

    string responseString = "";
    ...
        if (response.IsSuccessStatusCode)
        {
         responseString = response.Content.ReadAsStringAsync().Result;
         Message jsonObject = JsonConvert.DeserializeObject<Message>(responseString.ToString(), 
    new JsonSerializerSettings
    {
    NullValueHandling = NullValueHandling.Ignore
    });

        ...
}    

答案 1 :(得分:-1)

始终初始化对象的最佳做法。

User user = new User();  // Ensuring it will return a empty object instead of null.

没有看到实际的完整代码,很难弄清楚什么是内部人员GetAsync(...)