【问题标题】:ASP.NET Core 2.x - HttpClient api returns error 'Object reference not set to an instance of an object'ASP.NET Core 2.x - HttpClient api 返回错误“对象引用未设置为对象的实例”
【发布时间】:2018-08-13 11:18:49
【问题描述】:

我通过发送 httpClient 消息请求来查询公共 API (https://api.bitfinex.com/v1/pubticker/ethusd),但我不知道为什么结果返回为空对象错误,即使 REST API 本身工作正常。我哪里错了?

private readonly HttpClient _httpClient;
private const string apiUri = "https://api.bitfinex.com/v1/pubticker/ethusd";

public DataController(
  HttpClient httpClient
)
{
  httpClient = _httpClient;
}

[HttpGet("ticker")]
[ProducesResponseType(typeof(Ticker), 200)]
public async Task<IActionResult> GetTicker()
{
  HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, apiUri);
  requestMessage.Headers.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json")
  );

  var response = await _httpClient.SendAsync(requestMessage);
  
  return Ok(response);
}

【问题讨论】:

    标签: c# rest asp.net-core dotnet-httpclient


    【解决方案1】:

    在您的代码更改中,

    public DataController(
      HttpClient httpClient
    )
    {
      httpClient = _httpClient;
    }
    

    public DataController(
      HttpClient httpClient
    )
    {
      _httpClient = httpClient;
    }
    

    【讨论】:

      【解决方案2】:

      问题是试图序列化来自HttpClient 的响应。这是不正确的,并且会导致各种问题,因为您已经涉及到流等。你应该做的是将内容读入一个对象,然后返回:

      using (var response = await _httpClient.SendAsync(requestMessage))
      {
          var content = await response.Content.ReadAsAsync<SomeClass>();
          return Ok(content);
      }
      

      或者,如果您没有使用可以映射到的类,并且不想创建一个,则可以直接使用 JSON.NET 手动反序列化响应内容:

      using (var response = await _httpClient.SendAsync(requestMessage))
      {
          var content = await response.Content.ReadAsStringAsync();
          var model = JsonConvert.DeserializeObject(content);
          return Ok(model);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-02-03
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-09
        • 2012-08-31
        • 2011-11-21
        • 2012-10-01
        相关资源
        最近更新 更多