[英]ASP.NET Core 5 - CreatedAtAction not returning any data when returning complex object
我有一個控制器方法應該返回一個復雜的對象:
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
,並且序列化不會選擇這些屬性。 讓他們公開,一切都很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.