为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET Web API GET 方法返回的数据部分缺失

ASP.NET Web API GET 方法返回的数据部分缺失

PHP
达令说 2024-01-20 15:54:09
我的 ASP.NET Web API 应用程序在返回数据时遇到一些问题。我有 2 个模型,省到区作为一对多关系。我按照Microsoft 网站的教程使用预加载这是我的Province.cs模型[Table("province")]public class Province{    [Key]    [Column("id")]    public int Id { get; set; }    [Column("displayName")]    public string DisplayName { get; set; }    [Column("code")]    [StringLength(10)]    public string Code { get; set; }    // FKs    public virtual ICollection<District> Districts { get; set; }}我的District.cs模特[Table("district")]public class District{    [Key]    [Column("id")]    public int Id { get; set; }    [Column("displayName")]    public string DisplayName { get; set; }    [Column("prefix")]    public string Prefix { get; set; }    [Column("provinceId")]    public int ProvinceId { get; set; }    // FKs    public virtual Province Province { get; set; }}在我LocationController.cspublic async Task<ActionResult<IEnumerable<Province>>> GetProvince([FromQuery] Province _province){    // Eager Loading    return await _context.province.Include(p => p.Districts).Where(p => p.Id == _province.Id).ToListAsync();}当我打电话https://localhost:44346/api/province?id=1或使用id我的数据库中存在的任何内容时。Postman 和我所有的浏览器(MS Edge、Chrome...)都只返回 JSONArray 的一部分。看起来像这样:[    {        "id": 1,        "displayName": "Hồ Chí Minh",        "code": "SG",        "districts": [            {                "id": 1,                "displayName": "Bình Chánh",                "prefix": "Huyện",                "provinceId": 1就是这样。只有11行数据。它甚至与 JSON 格式不匹配。我的预期回报必须是:[    {        "id": 1,        "displayName": "Hồ Chí Minh",        "code": "SG",        "districts": [            {                "id": 1,                "displayName": "Bình Chánh",                "prefix": "Huyện",                "provinceId": 1            },            {                ...            },...    },...]或者至少是正确的 JSON 格式。我之前的 2 个 API 可以很好地获取每个表的所有数据。我在这里缺少什么?谢谢。
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

您应该创建一个模型并返回它而不是您的实体。

这是由于自引用循环而发生的。

如果您正在使用Newtonsoft.Json可以在startup.cs中忽略它

services.AddMvc()
     .AddJsonOptions(options =>
     {
         options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
     })


查看完整回答
反对 回复 2024-01-20
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信