【发布时间】: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