【发布时间】:2022-01-03 11:48:12
【问题描述】:
我有一个 BlazorWASM 客户端使用 .Net5/6 中的 HttpClient 从我的 API 请求响应。
填充对象“DataManifest”,然后通过 OK() 方法通过 IActionResult 提交:
[HttpGet]
[Route("/Data/GetManifest")]
public async Task<IActionResult> GetManifest()
{
try
{
DataManifest manifest = new();
manifest.LastJob = await _db.jobs.MaxAsync(x=>x.id);
manifest.LastJobCost = await _db.jobcosts.MaxAsync(x => x.id);
manifest.LastEvent = await _db.events.MaxAsync(x => x.task_id);
manifest.LastPurchaseInvoice = await _db.purchaseinvoices.MaxAsync(x => x.id);
manifest.LastTimeRecord = await _db.TimeRecords.MaxAsync(x => x.id);
return Ok(new ApiResponse<DataManifest> { IsSuccess = true, Message = "", Value = manifest, msTiming = (int)watch.ElapsedMilliseconds });
在 VS 中检查对象显示它是完整的,包含数据,“清单”的属性设置正确。
但是查看 http 响应(状态:200)中包含的内容,从 Edge 中的 DevTools 中,value/'manifest' 对象为 null(其他字段按预期填充):
{value: {}, message: "", isSuccess: true, msTiming: 17}
我还有其他运行良好的 HttpGet(确实是像 ApiResponse 这样的对象)。我不明白为什么我的 DataManifest 对象会导致问题!
--- 更多信息: ApiResponse 是:
public class ApiResponse
{
public string Message { get; set; } = default!;
public bool IsSuccess { get; set; }
public int msTiming { get; set; }
}
public class ApiResponse<T> : ApiResponse
{
public T Value { get; set; } = default!;
}
清单:
public class DataManifest
{
public int lastJob;
public int LastEvent;
public int LastJobCost;
public int LastPurchaseInvoice;
public int LastTimeRecord;
}
【问题讨论】:
-
你能说明你是如何声明
DataManifest的吗?我的猜测是你在那里没有属性,只有字段。 System.Text.Json 默认忽略字段。 -
宾果游戏!谢谢@LasseV.Karlsen - 这正是问题所在。添加 {set; get;} 到每个字段都解决了这个问题。
标签: c# .net entity-framework asp.net-core asp.net-core-webapi