ASP.NET 核心 2.x - HttpClient api returns 错误 'Object reference not set to an instance of an object'
ASP.NET Core 2.x - HttpClient api returns error 'Object reference not set to an instance of an object'
我通过发送httpClient
消息请求查询了一个publicAPI(https://api.bitfinex.com/v1/pubticker/ethusd),但我不知道为什么结果returns为空对象错误,即使 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);
}
问题是试图序列化来自 HttpClient
的响应。这是不正确的,并且会导致各种问题,因为你有流等涉及。您应该做的是将内容读入一个对象,然后 return 那:
using (var response = await _httpClient.SendAsync(requestMessage))
{
var content = await response.Content.ReadAsAsync<SomeClass>();
return Ok(content);
}
或者,如果您没有使用可以映射到的 class,并且不想创建一个,您可以直接使用 JSON.NET 手动反序列化响应内容:
using (var response = await _httpClient.SendAsync(requestMessage))
{
var content = await response.Content.ReadAsStringAsync();
var model = JsonConvert.DeserializeObject(content);
return Ok(model);
}
在您的代码更改中,
public DataController(
HttpClient httpClient
)
{
httpClient = _httpClient;
}
至
public DataController(
HttpClient httpClient
)
{
_httpClient = httpClient;
}
我通过发送httpClient
消息请求查询了一个publicAPI(https://api.bitfinex.com/v1/pubticker/ethusd),但我不知道为什么结果returns为空对象错误,即使 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);
}
问题是试图序列化来自 HttpClient
的响应。这是不正确的,并且会导致各种问题,因为你有流等涉及。您应该做的是将内容读入一个对象,然后 return 那:
using (var response = await _httpClient.SendAsync(requestMessage))
{
var content = await response.Content.ReadAsAsync<SomeClass>();
return Ok(content);
}
或者,如果您没有使用可以映射到的 class,并且不想创建一个,您可以直接使用 JSON.NET 手动反序列化响应内容:
using (var response = await _httpClient.SendAsync(requestMessage))
{
var content = await response.Content.ReadAsStringAsync();
var model = JsonConvert.DeserializeObject(content);
return Ok(model);
}
在您的代码更改中,
public DataController(
HttpClient httpClient
)
{
httpClient = _httpClient;
}
至
public DataController(
HttpClient httpClient
)
{
_httpClient = httpClient;
}