
深入解析API网关策略:认证、授权、安全、流量处理与可观测性
在 .NET 世界,DTO(Data Transfer Object)是一种“瘦身”模型,用于在 API 与客户端之间传输数据。它可以:
假设用户模型里含有 Password
字段,你绝对不能连同密码一起返回。
> 错误做法:return user;
> 正确做法:定义 UserResponseDto { Username, Email … }
,只传回安全字段。
Dtos
文件夹;再在其中按实体分子目录,这里创建 Dtos/Stock
。
API/
└── Dtos/
└── Stock/
└── StockResponseDto.cs
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; }
}
在 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
};
}
将原先:
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。原文引自YouTube视频:https://www.youtube.com/watch?v=Mxm81T7waO8