Возвращенные данные частично отсутствуют в методе GET ASP.NET Web API - PullRequest
0 голосов
/ 28 сентября 2019

У меня возникли некоторые проблемы с моим приложением ASP.NET Web API с возвращенными данными.

У меня есть 2 модели, отношения между провинциями как один-ко-многим.Я использую Eager Loading после учебник с веб-сайта 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.

Мой предыдущий 2API получают все данные каждой таблицы нормально.

Что мне здесь не хватает?Спасибо.

1 Ответ

1 голос
/ 28 сентября 2019

Вы должны создать модель и вернуть ее вместо ваших сущностей.

Это происходит из-за цикла самоссылки.

Если вы используете Newtonsoft.Json, вы можете игнорировать его при запуске.cs

services.AddMvc()
     .AddJsonOptions(options =>
     {
         options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
     })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...