Http 从WebAPI控制器调用GetAsync
我正在尝试从ASP.NET WebAPI中的控制器方法返回HTTP结果。我正在调用一个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&
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类型是任务
,而不仅仅是字符串
?