Http 从WebAPI控制器调用GetAsync

Http 从WebAPI控制器调用GetAsync,http,asp.net-web-api,async-await,dotnet-httpclient,Http,Asp.net Web Api,Async Await,Dotnet Httpclient,我正在尝试从ASP.NET WebAPI中的控制器方法返回HTTP结果。我正在调用一个GetAsync方法,因此我需要使用async wait并返回一个Task 当然,这是控制器方法,为了说明目的而简化: [HttpGet] public async Task<string> MyMethod() { var url = @"http://localhost/whatever"; return await HttpGet<string&

我正在尝试从ASP.NET WebAPI中的控制器方法返回HTTP结果。我正在调用一个
GetAsync
方法,因此我需要使用async wait并返回一个
Task

当然,这是控制器方法,为了说明目的而简化:

[HttpGet]
public async Task<string> MyMethod()
{   
    var url = @"http://localhost/whatever";
    return await HttpGet<string>(url);  
}
[HttpGet]
公共异步任务MyMethod()
{   
var url=@”http://localhost/whatever";
返回等待HttpGet(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(字符串url)
{
varu httpClient=新的httpClient();
var response=await\u httpClient.GetAsync(url);
if(响应。IsSuccessStatusCode)
return wait response.Content.ReadAsAsync();
抛出新异常($“{response.StatusCode}-{response.RequestMessage}”);
}
HttpGet
方法中的
return wait
之后,我在下面得到一个错误:

消息”:“发生错误。”

异常消息”:“分析值[.Path“”,第1行,位置1]时遇到意外字符。”

例外类型”:“Newtonsoft.Json.JsonReaderException”


有什么建议吗?

问题在于HTTP调用的返回类型。这是一个对象列表,而我告诉
ReadAsAsync
需要一个
字符串

这就解决了它:

[HttpGet]
public async Task<List<MyClass>> MyMethod()
{   
    var url = @"http://localhost/whatever";
    return await HttpGet<List<MyClass>>(url);  
}
[HttpGet]
公共异步任务MyMethod()
{   
var url=@”http://localhost/whatever";
返回等待HttpGet(url);
}

如果从GetAsync返回的json无效,则通常会出现此类错误。如果没有看到它,您可能希望手动获取它,并使用类似的方法进行测试,以确保它是有效的json。它甚至可能不是json。在尝试解析它之前,请调试并检查原始响应本身。因此,您认为问题不在于return类型是
任务
,而不仅仅是
字符串