c# - Asp.Net Core Web API 2.2 控制器不返回完整的 JSON
问题描述
我的 Asp.Net Core Web API 2.2 项目中有一个 Web API 控制器。
Messageboard
模型:
public class MessageBoard
{
public long Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<Message> Messages { get; set; }
}
Message
模型:
public class Message
{
public long Id { get; set; }
public string Text { get; set; }
public string User { get; set; }
public DateTime PostedDate { get; set; }
public long MessageBoardId { get; set; }
[ForeignKey("MessageBoardId")]
public MessageBoard MessageBoard { get; set; }
}
这是我的 Web API 控制器操作之一,为简洁起见缩短:
[Route("api/[controller]")]
[ApiController]
public class MessageBoardsController : ControllerBase
{
// GET: api/MessageBoards
[HttpGet]
public async Task<ActionResult<IEnumerable<MessageBoard>>> GetMessageBoards()
{
return await _context.MessageBoards
.Include(i => i.Messages)
.ToListAsync();
}
}
每当我向 MessageBoards 发出 GET 请求时,只会返回正确 JSON 的一部分。这是从https://localhost:44384/api/MessageBoards/
Postman 上访问返回的 JSON:
[{"id":1,"name":"Test Board 2","description":"用于测试目的的第二个留言板。","messages":[{"id":1,"text":"发布我的第一条消息!","user":"Jesse","postedDate":"2019-01-01T00:00:00","messageBoardId":1
JSON 被截断(因此它是一个丑陋的块并且没有被 Postman 美化),可能是由于模型MessageBoard
上的属性,Message
因为它是第一个丢失的 JSON 项。
如何使操作正确返回 MessageBoards 和子消息列表?
解决方案
我看到您Eager Loading
在查询中使用。因此,在您的类中添加以下配置Startup
以忽略它在对象图中找到的循环并正确生成JSON
响应。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
...
}
有关更多详细信息: EF Core 中的相关数据和序列化
推荐阅读
- react-native - yarn --version 在 package.json 中返回 1.15.2 但 1.19.1
- reactjs - Windows 10 上的 npm 相关错误
- javascript - Bootstrap carousel next/prev 方法强制它更快地自动播放
- javascript - WebGL 着色器闪烁
- audiokit - AudioKit,从参考文件创建 eq
- mongodb - 如何在mongodb中更新对象数组
- python - 如何在 Python 中为复杂的 __init__ 使用数据类?
- machine-learning - 区分猫狗的迁移学习实践
- android - 错误:在 Ionic 3 中找不到 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25
- python - 您必须检查字符串列表并且每个项目都必须比前一个项目长的问题