C# HttpClient JsonReaderException解析值时出现意外字符 上下文-我们的代码
重定向API Http GET调用时遇到错误。我在stackoverflow中搜索了类似的问题,但它似乎与我们的问题不同 我们有一个简单的场景。我们的解决方案是作为API调用“网关”的后端 从angular客户端,我们调用/api/values,它必须重定向到C# HttpClient JsonReaderException解析值时出现意外字符 上下文-我们的代码,c#,asp.net-web-api,asp.net-core,.net-core,dotnet-httpclient,C#,Asp.net Web Api,Asp.net Core,.net Core,Dotnet Httpclient,重定向API Http GET调用时遇到错误。我在stackoverflow中搜索了类似的问题,但它似乎与我们的问题不同 我们有一个简单的场景。我们的解决方案是作为API调用“网关”的后端 从angular客户端,我们调用/api/values,它必须重定向到http://example.com:8080/api/values 因此,我们开始了一个.NET核心API项目,并尝试从API控制器简单地进行API客户端调用 以下是原始类: namespace WebApplication2.Contr
http://example.com:8080/api/values
因此,我们开始了一个.NET核心API项目,并尝试从API控制器简单地进行API客户端调用
以下是原始类:
namespace WebApplication2.Controllers
{
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
}
在.NET中得到的响应
好的,通过定义响应模型解决了这个问题。比如
public class DocumentInfo
{
public int errorCode;
public string docId;
public int status;
}
然后按如下方式键入:
var retValue = new DocumentInfo();
retValue = await response.Content.ReadAsAsync<DocumentInfo>();
var retValue=newdocumentinfo();
retValue=wait response.Content.ReadAsAsync();
关于方法:
public async Task<DocumentInfo> Get()
公共异步任务Get()
后续问题
有没有办法不强键入返回的结果?如果它从远程API更改(例如,如果他们添加了“所有者”属性),它将中断?这一行就是问题所在
retValue = await response.Content.ReadAsAsync<string>();
您应该会得到所需的结果。这看起来像是一个序列化的
HttpResponseMessage
。第二次调用结束时,会将该对象作为模型传回。在一个不相关的问题上,请重用您的HttpClient实例,而不是每次都创建一个新实例。谢谢,它也能工作!我的想法是直接强力键入答案,但我更喜欢将原始json作为字符串,然后将其“重新转换”为json。在这种情况下,即使远程API在答案中添加键/值,我的脚本也不会中断。
var retValue = new DocumentInfo();
retValue = await response.Content.ReadAsAsync<DocumentInfo>();
public async Task<DocumentInfo> Get()
retValue = await response.Content.ReadAsAsync<string>();
retValue = await response.Content.ReadAsStringAsync();