从 WebAPI 控制器调用 GetAsync
Call GetAsync from a WebAPI controller
我正在尝试 return 来自 ASP.NET WebAPI 中的控制器方法的 HTTP 结果。我正在调用 GetAsync
方法,所以我需要使用 async-await 和 return a 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
之后出现以下错误:
"Message": "An error has occurred.",
"ExceptionMessage": "Unexpected character encountered while parsing value: [. Path '', line 1, position 1.",
"ExceptionType": "Newtonsoft.Json.JsonReaderException"
有什么建议吗?
问题出在 HTTP 调用的 return 类型中。这是一个对象列表,而我告诉 ReadAsAsync<T>
期待一个 string
。
这解决了它:
[HttpGet]
public async Task<List<MyClass>> MyMethod()
{
var url = @"http://localhost/whatever";
return await HttpGet<List<MyClass>>(url);
}
我正在尝试 return 来自 ASP.NET WebAPI 中的控制器方法的 HTTP 结果。我正在调用 GetAsync
方法,所以我需要使用 async-await 和 return a 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
之后出现以下错误:
"Message": "An error has occurred.",
"ExceptionMessage": "Unexpected character encountered while parsing value: [. Path '', line 1, position 1.",
"ExceptionType": "Newtonsoft.Json.JsonReaderException"
有什么建议吗?
问题出在 HTTP 调用的 return 类型中。这是一个对象列表,而我告诉 ReadAsAsync<T>
期待一个 string
。
这解决了它:
[HttpGet]
public async Task<List<MyClass>> MyMethod()
{
var url = @"http://localhost/whatever";
return await HttpGet<List<MyClass>>(url);
}