【问题标题】:GET <URL> net::ERR_CONNECTION_RESET获取 <URL> 网络::ERR_CONNECTION_RESET
【发布时间】:2026-01-20 15:30:01
【问题描述】:

我有返回 JSON 的 WebAPI 控制器。代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using GetWork.Data;
using GetWork.Models.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Cors;

namespace GetWork.Controllers.Api
{
    [Produces("application/json")]
    [EnableCors("SiteCorsPolicy")]
    public class ConversationsApiController : Controller
    {
        private readonly ApplicationDbContext _context;

        public ConversationsApiController(ApplicationDbContext context)
        {
            _context = context;
        }
        //This one works fine
        // GET: api/Conversations/5
        [HttpGet]
        [Route("api/conversations/getconversations/{id}")]
        public List<Conversation> GetConversations(int id)
        {
            var conversations = _context.Conversations.Include(o => o.Offerer).Where(c => c.JobRelated.ID == id).ToList();

            return conversations ?? new List<Conversation>();
        }
        //This one works fine
        [HttpGet]
        [Route("api/conversations/getmyoffers/{userId}")]
        public List<Job> GetMyOffers(string userId)
        {
            return _context.Job.Include(c => c.Conversations).ToList();

        }

    }
}

当调用 GetMyOffers 方法时,在浏览器中我可以看到这样的错误:

GET http://localhost:8377/api/conversations/getMyOffers/70a741c2-b847-4063-ab94-7f2e93860ab6 net::ERR_CONNECTION_RESET

但是当我对数据进行硬编码(省略 _context)时,一切正常。其他方法正在起作用。

什么会导致这样的问题?

更新:

终于找到了这样的期待:

Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'job' with type 'GetWork.Models.Domain.Job'

需要验证我的模型。

解决方案:

默认情况下,序列化程序无法处理自引用循环。我在配置中添加了以下行:

options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

它在序列化过程中忽略所有循环引用。它对我有用,但我知道它可以解决而不是修复。 (考虑使用 DTO 而不是纯模型)。

【问题讨论】:

  • 您能否更新您的代码以更清楚地了解哪个网址正在运行以及哪个网址没有
  • 你试过调试吗?检查它何时失败。如果您在下面有 MSSQL,您可以尝试分析以查看问题是否出现在对数据库的实际查询之前或之后。其他选项是在调试时转到异常设置并将 CLR 异常标记为选中以在调试模式下捕获更多异常。
  • 分析由于某种原因不起作用,但我相信我终于找到了问题的根源。 (检查更新)

标签: c# asp.net .net asp.net-web-api


【解决方案1】:

如果它在您删除 _context 并且只返回硬编码数据时有效,我会怀疑它很可能是超时:

可以通过增加请求超时来解决,例如:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.webServer>
             ....
        <aspNetCore requestTimeout="00:20:00"  .... />
    </system.webServer>
</configuration>

您可以通过包装 _context.Job.Include(c =&gt; c.Conversations).ToList(); 来增加代码的健壮性 在 try catch 块中,并在抛出异常时返回有意义的内容,例如

try {
   return _context.Job.Include(c => c.Conversations).ToList();
}
catch(Exception ex) {
   return something meaningful here...
}

【讨论】:

  • 感谢您的回复。我相信您提供的 XML 代码属于 web.config 文件。我不确定是否可以使用它,因为我使用的是 MVC 6,整个配置位于 appsettings.json 中。
  • 您说得对,上述配置仅适用于您在 IIS 中托管应用程序的情况,抱歉回答没有帮助
  • 我能以某种方式将默认服务器更改为 IIS 吗?据我所知,MVC 6 默认使用 Kestrel 服务器并且仅使用 IIS 作为反向代理。