为了安全考虑,使用EFcore进行数据交互时,使用模型的子集,通常称为数据传输对象(DTO)、输入模型或视图模型,而不是直接使用模型类。
DTO用途:
- 防止过度发布。
- 隐藏客户端不应查看的属性。
- 省略一些属性以缩减有效负载大小。
- 平展包含嵌套对象的对象图。 对客户端而言,平展的对象图可能更方便。
例如TodoItem模型类,包含秘密字段
namespace TodoApi.Models
{
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
public string? Secret { get; set; }
}
}
创建DTO模型,选择性发布和获取机密字段
namespace TodoApi.Models
{
public class TodoItemDTO
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
}
控制器文件重写:
public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
{