【发布时间】:2021-04-11 17:56:04
【问题描述】:
我正在尝试将字符串 cmets 列表添加到我的数据模型中。经过一番谷歌搜索,这是我想出的:
public class TaskItem
{
public long Id { get; set; };
public string title { get; set; };
public List<Comment> comments { get; set; }
}
public class Comment
{
public long Id { get; set; }
public string comment_text { get; set; }
}
使用 Postman 发送 POST 会得到很好的 201 响应:
{
"id": 1,
"title": "First task",
"comments": [
{
"id": 1,
"comment_text": "This is one comment"
},
{
"id": 2,
"comment_text": "Here is another"
}
]
}
但是:使用 GET 请求检索项目会在 cmets 字段中产生“null”(响应代码为 200):
{
"id": 1,
"title": "First task",
"comments": null <--------- ???
}
为什么 API 不返回 POST 后的 cmets?
提前致谢/大卫
编辑:根据请求,这是我的控制器的相关部分(使用 Visual Studio 自动生成):
// GET: api/TaskItems/5
[HttpGet("{id}")]
public async Task<ActionResult<TaskItem>> GetTaskItem(long id)
{
var taskItem = await _context.TaskItems.FindAsync(id);
if (taskItem == null)
{
return NotFound();
}
return taskItem
}
// POST: api/TaskItems
[HttpPost]
public async Task<ActionResult<TaskItem>> PostTaskItem(TaskItem taskItem)
{
_context.TaskItems.Add(taskItem);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetTaskItem), new { id = taskItem.Id }, taskItem);
}
【问题讨论】:
-
如果没有 minimal reproducible example 来阐明您的具体问题或没有其他详细信息来突出确切所做的事情,那么将很难重现问题这将有助于更好地理解什么是实际问题。
-
为什么在 POST 工作时使用 GET? Get 和 Post 都返回响应。唯一的区别是 Post 请求正文中有数据,而 Get 请求正文为空。
-
你能展示一下你的控制器吗?
-
@DavidMontgomery 很可能 cmets 未保存在 POST 上,因此在发出后续 GET 请求时未检索到。
-
问题不只是延迟加载吗?因为您在
_context.TaskItems?docs.microsoft.com/en-us/ef/core/querying/related-data 之后缺少包含。某处应该有明显的欺骗
标签: c# asp.net .net entity-framework