
深入解析API网关策略:认证、授权、安全、流量处理与可观测性
在互联网上填写表单时,用户经常输入虚假或格式错误的数据。为保证 API 接收的数据符合预期,数据校验(Data Validation) 是必不可少的步骤。
本文将演示两种常见校验方式:路由约束(简单类型校验)与 DataAnnotations(复杂类型校验)。
原理
路由约束可以在路由模板中指定参数类型,例如 {id:int}
,如果传入非整数会直接返回 404。
实现步骤
在 Controller 的路由属性中添加类型约束:
[HttpGet("{id:int}")]
public async Task < ActionResult < Comment > > GetCommentAsync(int id)
{
// ...
}
同理,DELETE、PUT 等带 ID 的路由也可加上 :int
。
GET /api/comment/abc
,将返回 404。添加校验特性
在 DTO 属性上使用 [Required]
、[MinLength]
、[MaxLength]
、[Range]
等特性。例如对 CreateCommentRequest
:
public class CreateCommentRequest
{
[Required]
[MinLength(5, ErrorMessage = "Title must be at least 5 characters.")]
[MaxLength(280, ErrorMessage = "Title cannot exceed 280 characters.")]
public string Title { get; set; }
[Required]
[MinLength(5, ErrorMessage = "Content must be at least 5 characters.")]
[MaxLength(280, ErrorMessage = "Content cannot exceed 280 characters.")]
public string Content { get; set; }
}
对其他 DTO 重复同样操作
UpdateCommentRequest
CreateStockRequest
(Symbol、CompanyName、PurchasePrice、Dividend、Industry、MarketCap)UpdateStockRequest
检查 ModelState
在每个接收 DTO 的端点顶部添加:
if (!ModelState.IsValid)
return BadRequest(ModelState);
这样一来,框架会根据 DTO 上的 DataAnnotations 自动校验,并在失败时返回 400 错误及详细信息。
示例:CreateCommentAsync
[HttpPost]
public async Task < ActionResult < Comment > > CreateCommentAsync(CreateCommentRequest dto)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
// 创建逻辑...
}
路由约束测试
GET /api/comment/string
→ 404。DTO 校验测试
POST /api/comment
提交短于 5 字符的 Title 或超长 Content → 返回 400 与错误信息。POST /api/stock
提交缺失必填字段或超出范围的数值 → 返回 400。ModelState
进行复杂校验。通过以上方法,可有效提升 API 的健壮性与安全性。下一步可探索全局过滤器(Action Filter)、自定义校验属性等更高级的校验机制。
原文引自YouTube视频:https://www.youtube.com/watch?v=1i_WE4aGVLU