簡體   English   中英

ASP.NET Core 5 - CreatedAtAction 在返回復雜對象時不返回任何數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM