从WebAPI控制器调用GetAsync

时间:2020-03-12 15:57:59

标签: http asp.net-web-api async-await dotnet-httpclient

我正在尝试从ASP.NET WebAPI中的控制器方法返回HTTP结果。我正在调用GetAsync方法,因此我需要使用async-await并返回一个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}");              
}

return await方法的HttpGet之后,我收到以下错误消息:

消息”:“发生错误。”,

ExceptionMessage ”:“解析值时遇到意外字符:[。路径”,第1行,位置1。”,

ExceptionType ”:“ Newtonsoft.Json.JsonReaderException”

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

问题出在HTTP调用的返回类型中。这是一个对象列表,而我告诉ReadAsAsync<T>期望string

这解决了它:

[HttpGet]
public async Task<List<MyClass>> MyMethod()
{   
    var url = @"http://localhost/whatever";
    return await HttpGet<List<MyClass>>(url);  
}