ASP.NET Core Web API DTO 实践:Data Transfer Object 全方位解析
作者:xiaoxin.gao · 2025-06-27 · 阅读时间:3分钟
ASP.NET Core DTO
DTO 裁剪 Model
Select map ToDto
StockResponseDto 教程
Web API Data Transfer Object
手写 DTO Mapper
1. 什么是 DTO?为何要用它? 在 .NET 世界,DTO(Data Transfer Object)是一 […]
文章目录
1. 什么是 DTO?为何要用它?
在 .NET 世界,DTO(Data Transfer Object)是一种“瘦身”模型,用于在 API 与客户端之间传输数据。它可以:
- 裁剪字段:去除如密码、内部标识等不应泄露的属性;
- 定制格式:前端只需关心特定字段,无需承受完整实体。
2. 响应 DTO vs 请求 DTO
- 响应 DTO:定义服务端返回给客户端的数据结构;
- 请求 DTO:定义客户端提交给服务端的数据结构。
90% 的场景里,API 的入参与出参都会使用这两类 DTO,对业务层与数据层起到解耦保护。
3. 举例:绝不直接返回完整 Model
假设用户模型里含有 Password
字段,你绝对不能连同密码一起返回。
错误做法:
return user;
正确做法:定义UserResponseDto { Username, Email … }
,只传回安全字段。
4. 创建 DTO 文件夹与 StockResponseDto
- 在项目根目录下新建
Dtos
文件夹; -
再在其中按实体分子目录,这里创建
Dtos/Stock
。API/ └── Dtos/ └── Stock/ └── StockResponseDto.cs
5. 编写 StockResponseDto 类
public class StockResponseDto
{
public int Id { get; set; }
public string Symbol { get; set; } = string.Empty;
public string CompanyName { get; set; } = string.Empty;
public decimal PurchasePrice{ get; set; }
public decimal LastDividend { get; set; }
public string Industry { get; set; } = string.Empty;
public long MarketCap { get; set; }
}
6. 自写 Mapper:Stock → StockResponseDto
在 Mappers/StockMapper.cs
中,利用扩展方法将 Stock
实体投射到 DTO:
public static class StockMapper
{
public static StockResponseDto ToDto(this Stock stock) = >
new()
{
Id = stock.Id,
Symbol = stock.Symbol,
CompanyName = stock.CompanyName,
PurchasePrice = stock.PurchasePrice,
LastDividend = stock.LastDividend,
Industry = stock.Industry,
MarketCap = stock.MarketCap
};
}
7. 在 Controller 中应用 DTO
将原先:
var stocks = await _context.Stocks.ToList();
return ok(stocks);
替换为:
var dtos = await _context.Stocks
.Select(s = > s.ToDto())
.ToListAsync();
return Ok(stocks);
Select(s = > s.ToDto())
等同于 JavaScript 的map
,批量转换为 DTO。
小结
- DTO:裁剪与定制数据结构,提升安全与性能;
- 扩展方法 Mapper:轻量、直观,比 AutoMapper 更易掌控;
- Select + ToDto:让 Controller 返回清晰、可维护的 DTO 列表。
原文引自YouTube视频:https://www.youtube.com/watch?v=Mxm81T7waO8
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- Python调用免费翻译API实现Excel文件批量翻译
- 为开源项目 go-gin-api 增加 WebSocket 模块
- AI编程的风险,如何毁掉你的 API?
- 使用预约调度API的运输管理
- Claude 免费用户频繁被限流?实用应对策略推荐
- 如何获取谷歌新闻 API Key 密钥(分步指南)
- API 目录 – 什么是 API 目录?
- 用NestJS和Prisma: Authentication构建一个REST API
- DeepSeek – Anakin.ai 的 Reason 模型 API 价格是多少?
- 19个API安全最佳实践,助您实现安全
- 如何免费调用Kimi API实现项目集成
- 探索 Zomato API 的潜力