【问题标题】:Why does ASP.Net Core Web API return a partial resut for my object?为什么 ASP.Net Core Web API 会为我的对象返回部分结果?
【发布时间】:2017-09-08 20:40:49
【问题描述】:

我正在尝试从我的 Core 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;

对象如下所示:

所以看到我的对象即使具有深层属性也是如此。

但是 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。 但是不行。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多