gpt4 book ai didi

c# - 解析值时 HttpClient JsonReaderException 意外字符

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:10 26 4
gpt4 key购买 nike

上下文 - 我们的代码

我们在重定向 API Http GET 调用时遇到错误。我在 stackoverflow 上搜索了类似的问题,但它似乎不像我们的问题。

我们有一个简单的场景。我们的解决方案是作为 API 调用“网关”的后端。

从我们的角度客户端,我们调用/api/values 并且它必须重定向到 http://example.com:8080/api/values

所以我们开始了一个 .NET Core API 项目,我们尝试从 API Controller 简单地进行 API 客户端调用。

这是原始类:

namespace WebApplication2.Controllers
{
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
}

然后,我们将实际调用添加到我们的真实 API,如许多教程中所述。我们只想返回从我们的 API 获得的响应(格式见下文)。

// GET api/values
[HttpGet]
public async Task<String> Get()
{
string retValue = "";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://example.com:8000");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = await client.GetAsync("/document/info/ab5846a1afe8ad12e46a4e60");
if (response.IsSuccessStatusCode)
{
retValue = await response.Content.ReadAsAsync<string>();
}
}
return retValue;
}

错误

An unhandled exception occurred while processing the request.

JsonReaderException: Unexpected character encountered while parsing value: {. Path '', line 2, position 1. ReadStringValue

我们的API正常响应,简单的JSON

如果我使用这条路由向我们的 API 发送 postman ,结果如下:

{
"errorCode": 0,
"docId": "ab5846a1afe8ad12e46a4e60",
"status": 0
}

.NET 中得到的响应

{
"version":{
"major":1,
"minor":1,
"build":-1,
"revision":-1,
"majorRevision":-1,
"minorRevision":-1
},
"content":{
"headers":[
{
"key":"Content-Length",
"value":[
"78"
]
},
{
"key":"Content-Type",
"value":[
"application/json"
]
}
]
},
"statusCode":200,
"reasonPhrase":"",
"headers":[
{
"key":"Date",
"value":[
"Fri, 06 Jan 2017 12:54:31 GMT"
]
}
],
"requestMessage":{
"version":{
"major":1,
"minor":1,
"build":-1,
"revision":-1,
"majorRevision":-1,
"minorRevision":-1
},
"content":null,
"method":{
"method":"GET"
},
"requestUri":"http://example.com:8000/document/info/ab5846a1afe8ad12e46a4e60",
"headers":[
{
"key":"Accept",
"value":[
"application/json"
]
}
],
"properties":{

}
},
"isSuccessStatusCode":true
}

最佳答案

这行是问题

retValue = await response.Content.ReadAsAsync<string>();

带有 string 参数的 ReadAsAsync 泛型方法基本上是将 HttpResponseMessage 反序列化为字符串。

使用ReadAsStringAsync相反。

retValue = await response.Content.ReadAsStringAsync();

你应该会得到想要的结果。

关于c# - 解析值时 HttpClient JsonReaderException 意外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com