
HTTP API vs WebSocket API:選擇哪個來實現(xiàn)實時通信?
假設用戶模型里含有 Password
字段,你絕對不能連同密碼一起返回。
> 錯誤做法:return user;
> 正確做法:定義 UserResponseDto { Username, Email … }
,只傳回安全字段。
Dtos
文件夾;再在其中按實體分子目錄,這里創(chuàng)建 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