为什么ASP.Net Core Web API会为我的对象返回部分resut?

时间:2017-04-12 21:45:35

标签: asp.net-web-api asp.net-core-mvc

我正在尝试从我的核心ASP.Net WebAPI方法返回我的完整对象。

我一直在想,我没有正确选择我的物品,或者我们的模式有问题。 但是现在我注意到如果我在返回对象之前放置了断点,那么完整的对象就在我的查询中并且准备让我返回。

所以这是方法:

    [HttpPost]
    public async Task<Case> AddCase([FromBody] EmployeeCaseFromBodyModel model)
    {
        Case employeeCase = new Case()
        {
            PrimaryEmployeeId = model.EmployeeId,
            LerSpecialistId = model.LerSpecialistId,
            InitialContactId = model.InitialContactId,
            InitialConsultDate = model.InitialConsultDate,
            Notes = model.Notes
        };

        Case newCase = await _caseGenericService.InsertAsync(employeeCase);

        newCase.EmployeeCases = new List<EmployeeCase>();
        newCase.EmployeeCases.Add(new EmployeeCase
            {
                CaseId = newCase.Id,
                EmployeeId = model.EmployeeId
            }
        );
        await _caseGenericService.UpdateAsync(newCase);

        newCase = await _caseGenericService.GetSingleIncludingAsync(newCase.Id,
            new Expression<Func<Case, object>>[] {
            a => a.InitialContact,
            b => b.LerSpecialist
        });

        return newCase;
    }

如果我将断点放在这一行:

return newCase;

该对象如下所示:

enter image description here

因此,即使使用深层属性,也会看到我的对象已填充。

但API Post会返回此JSON结果:

{
  "initialContactId": 2,
  "initialContact": {
    "email": "test@hrsa.gov",
    "organizationId": 1,
    "supervisor": "Beth Dillon",
    "supervisorEmail": "supervisor@hrsa.gov",
    "firstName": "Cindy",
    "lastName": "Adams",
    "notes": "Notes 2",
    "bargainingUnitId": 1,
    "payPlanId": 8,
    "gradeRankId": 5,
    "positionTitleId": 25,
    "seriesId": 2,
    "isUnionEmployee": true,
    "organization": null,
    "bargainingUnit": null,
    "payPlan": null,
    "gradeRank": null,
    "positionTitle": null,
    "series": null,
    "unionHours": null,
    "unionEmployeeYesNo": "Yes",
    "employeeCases": [
      {
        "employeeId": 2
      }
    ]
  }
}

它只返回InitialContactID和IntitialContact,其中包含为intialContact填充的所有属性。 但是没有LerSpecialist,也没有像Id和IntitialConsultDate那样的顶级简单属性?

为什么它会像这样?

它不应该返回我告诉它的确切完整对象吗?

我还尝试将返回类型设置为IActionResult的Task而不是Task Case,并返回ObjectResult而不是Case。 但不行。

1 个答案:

答案 0 :(得分:2)

在这里找到它: ASP.NET Core API only returning first result of list

这行在StartUp.cs中为我做了:

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