ASP.Net Core 6 API 成功后获取空值 Post a JSON
ASP.Net Core 6 API Get Null Value after Successfully Post a JSON
我刚刚学习了 MS ASP.NET Core Web API 教程,但遇到了一些问题。
在创建了一个API并且可以成功POST一个json格式字符串到这个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"
}
]
}
获取响应
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 提到的,我可以成功地 GET
完成 Json
结果,只需在 TodoItems
之后添加 Include
方法,如下所示。
TodoItems.Include(ti => ti. TestArray).Select(x => ItemToDTO(x))
我刚刚学习了 MS ASP.NET Core Web API 教程,但遇到了一些问题。 在创建了一个API并且可以成功POST一个json格式字符串到这个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"
}
]
}
获取响应
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 提到的,我可以成功地 GET
完成 Json
结果,只需在 TodoItems
之后添加 Include
方法,如下所示。
TodoItems.Include(ti => ti. TestArray).Select(x => ItemToDTO(x))