我正在尝试从我的核心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。 但不行。
答案 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;
});