【发布时间】:2020-06-24 17:12:45
【问题描述】:
我正在尝试从 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调用方法,参数和Authorization被抽象掉了:
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 之后出现以下错误:
"消息": "发生错误。",
"ExceptionMessage": "解析值时遇到意外字符:[.Path '', line 1, position 1.",
"ExceptionType": "Newtonsoft.Json.JsonReaderException"
有什么建议吗?
【问题讨论】:
-
如果您的 GetAsync 返回的 json 无效,则经常会出现这种错误。在没有看到它的情况下,您可能需要手动抓取它并使用 jsonlint.com 之类的东西对其进行测试,以确保它是有效的 json。
-
它甚至可能不是 json。在尝试解析之前调试并检查原始响应本身。
-
所以您认为问题不在于返回类型为
Task<string>,而不仅仅是string?
标签: http asp.net-web-api async-await dotnet-httpclient