我正试图从ASP.NET WebAPI中的控制器方法返回HTTP结果。我正在调用一个GetAsync
方法,所以我需要使用异步等待并返回一个Task<T>
。
这是控制器方法,当然,为了说明的目的而简化:
[HttpGet]
public async Task<string> MyMethod()
{
var url = @"http://localhost/whatever";
return await HttpGet<string>(url);
}
以及HTTP调用方法,其中参数和授权被抽象掉:
private async Task<T> HttpGet<T>(string url)
{
var _httpClient = new HttpClient();
var response = await _httpClient.GetAsync(url);
if (response.IsSuccessStatusCode)
return await response.Content.ReadAsAsync<T>();
throw new Exception($"{response.StatusCode} - {response.RequestMessage}");
}
我在HttpGet
方法中的return await
之后得到以下错误:
">消息":"出现错误&";,
">异常消息":"分析值时遇到意外字符:[.Path",第1行,位置1。",
">异常类型":"Newtonsoft.Json.JsonReaderException";
有什么建议吗?
问题出在HTTP调用的返回类型上。这是一个对象列表,而我告诉ReadAsAsync<T>
期望string
。
这解决了问题:
[HttpGet]
public async Task<List<MyClass>> MyMethod()
{
var url = @"http://localhost/whatever";
return await HttpGet<List<MyClass>>(url);
}