猿问

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

我的 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.cs


public 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 可以很好地获取每个表的所有数据。


我在这里缺少什么?谢谢。


达令说
浏览 76回答 1
1回答

大话西游666

您应该创建一个模型并返回它而不是您的实体。这是由于自引用循环而发生的。如果您正在使用Newtonsoft.Json可以在startup.cs中忽略它services.AddMvc() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.AddJsonOptions(options&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.SerializerSettings.ReferenceLoopHandling&nbsp;=&nbsp;Newtonsoft.Json.ReferenceLoopHandling.Ignore; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})
随时随地看视频慕课网APP
我要回答