所有文章 > API使用场景 > ASP.NET Core Web API DTO 实践:Data Transfer Object 全方位解析
ASP.NET Core Web API DTO 实践:Data Transfer Object 全方位解析

ASP.NET Core Web API 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

  1. 在项目根目录下新建 Dtos 文件夹;
  2. 再在其中按实体分子目录,这里创建 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

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费