从 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);  
}