You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Controller调用API时Json DeserializeObject报错求助

问题排查与解决

从错误截图(显示HttpRequestException: 无法连接到远程服务器)和你的代码来看,问题出在无法成功访问目标API https://localhost:5001/api/Authors,以下是常见原因和解决步骤:

1. 确认目标API是否正常运行

  • 直接在浏览器或API测试工具(如Postman)中访问https://localhost:5001/api/Authors,验证是否能正常返回数据。
  • 检查API项目的启动端口是否为5001,排查是否存在启动失败(如端口被占用)的情况。

2. 处理HTTPS证书信任问题

本地开发的HTTPS服务默认使用自签名证书,HttpClient可能因不信任证书拒绝连接:

  • 临时方案:改用HTTP协议调用(修改地址为http://localhost:5000/api/Authors,注意对应API的HTTP端口)。
  • 永久方案:信任本地开发HTTPS证书,打开管理员权限的命令行执行:
    dotnet dev-certs https --trust
    

3. 给代码添加响应校验逻辑

你的代码未校验API响应状态,即使API返回错误(如404、500),仍会尝试反序列化内容,易引发额外异常。修改代码如下:

public async Task<IActionResult> Index()
{
    List<Author>? authorList = new List<Author>();
    using (var httpClient = new HttpClient())
    {
        using (var response = await httpClient.GetAsync("https://localhost:5001/api/Authors"))
        {
            // 确保API返回成功状态码
            response.EnsureSuccessStatusCode();
            
            string apiResponse = await response.Content.ReadAsStringAsync();
            authorList = JsonConvert.DeserializeObject<List<Author>>(apiResponse);
        }
    }
    return View(authorList);
}

4. 检查端口占用情况

如果API启动时报端口被占用,打开命令行执行以下命令找到占用进程并关闭:

netstat -ano | findstr :5001
taskkill /F /PID <找到的PID>

内容的提问来源于stack exchange,提问作者Bassam Alqadhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:31:43