ASP.NET Core 5 - CreatedAtAction在返回复杂对象时不返回任何数据.&



我有一个控制器方法,它应该返回一个复杂的对象:

public class ComplexObject {
public User User {get; set;}
public Job Job {get; set;}
}
public class User {
public string UserId {get; set;}
}
public class Job {
public int Id {get; set;}
}

因此,在我的控制器方法中,我返回如下数据:

return CreatedAtAction(nameof(GetJob), new { id = jobId }, new ComplexObject { User = new User{ UserId = "hello" }, Job = new Job{ Id = jobId } });

在这里,调用者(一些客户端应用程序,使用HttpClient)获得一个空json对象。如果我只发回一个作业,或者一个用户

return CreatedAtAction(nameof(GetJob), new { id = jobId }, new User { UserId = "hello" });

返回的主体包含我插入的实际对象。

知道我能做些什么来得到完整的ComplexObject返回吗?

尝试了同样的Created方法和ActionLink方法,但故事相同。

完整的控制器方法看起来像这样(剥离到最小值)

[HttpPost]
[Route("")]
public async Task<IActionResult> Add([FromBody] AddUserParameters obj)
{
if (!ModelState.IsValid)
return GenerateBadRequest();
int jobId = 1;
var result = new ComplexObject { User = new User { UserId = "hello" }, Job = new Job{ Id = jobId } }
return CreatedAtAction(nameof(GetJob), new { id = jobId }, result);
}
[HttpGet]
[Route("Job/{id}")]
public async Task<IActionResult> GetJob(int id, bool includeDependentElements = false)
{
var job = new Job { Id = id };
return Ok(job);
}

另一端调用的方法如下

public async Task<ComplexObject>> AddUserWithReload(AddUserParameters obj)
{
var response = await httpClient.PostAsJsonAsync($"{apiPath}/{usersPath}", obj).ConfigureAwait(continueOnCapturedContext);
if (response.IsSuccessStatusCode)
{
var resultObj = await response.Content.ReadAsAsync<ComplexObject>().ConfigureAwait(continueOnCapturedContext);
string jobId = response.Headers.Location.Segments.LastOrDefault();
if (int.TryParse(jobId, out int intJobId))
; // do something with it
return resultObj;
}
}

终于有时间再看一遍了。如果我自己序列化响应,尝试看看会发生什么,这些建议很有帮助。也有一个空json对象。真正的ComplexObject也有两个属性,但它们是internal,序列化并没有发现这些属性。把它们公开,一切都好。

最新更新