成功发布JSON后,ASP.Net Core 6 API获取空值



我刚学习了MS ASP.NET Core Web API教程,遇到了一些问题。在创建了一个API并可以成功地将json格式字符串POST到这个API之后,我想定制它的应用程序。

TodoItem不仅包含基本属性,还包含项目列表。

public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
public List<Item> TestArray { get; set; }
public string? Secret { get; set; }
}
public class Item
{
public long Id { get; set; }
public string? Path { get; set; }
}
public class TodoItemDTO
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
public List<Item> TestArray { get; set; }
}

这是我的控制器的POST和GET操作

[HttpPost]
public async Task<ActionResult<TodoItemDTO>> PostTodoItem(TodoItemDTO todoItemDTO)
{
var todoItem = new TodoItem
{
IsComplete = todoItemDTO.IsComplete,
Name = todoItemDTO.Name,
TestArray = todoItemDTO.TestArray
};
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
//return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(
nameof(GetTodoItem), 
new { id = todoItem.Id }, 
ItemToDTO(todoItem));
}

[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
{
return await _context.TodoItems.Select(x => ItemToDTO(x)).ToListAsync();
}
private static TodoItemDTO ItemToDTO(TodoItem todoItem) =>
new TodoItemDTO
{
Id = todoItem.Id,
Name = todoItem.Name,
IsComplete = todoItem.IsComplete,
TestArray = todoItem.TestArray
};

POST请求可以成功工作,但是,每当我向本地主机发送GET请求时,我总是收到一个空的TestArray。但其他属性也可以!我不确定JSON内容是否成功存储在数据库中,我是否犯了任何错误?

POST响应

HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Thu, 20 Jan 2022 09:22:20 GMT
Location: https://localhost:7261/api/TodoItems/1
Server: Kestrel
Transfer-Encoding: chunked
{
"id": 1,
"name": "walk dog",
"isComplete": true,
"testArray": [
{
"id": 1,
"path": "a"
},
{
"id": 2,
"path": "c"
}
]
}

GET响应

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Thu, 20 Jan 2022 09:22:23 GMT
Server: Kestrel
Transfer-Encoding: chunked
[
{
"id": 1,
"name": "walk dog",
"isComplete": true,
"testArray": null
}
]

正如@Peter Csala所提到的,只要在TodoItems之后添加Include方法,我就可以成功地GET完成Json结果,如下所示。TodoItems.Include(ti => ti. TestArray).Select(x => ItemToDTO(x))

最新更新