SuperAPI AI 工具集

dotnet-input-validation

通用与其它

查看项目

更新于 10-16 01:14

技能介绍

用途:为 .NET API 提供 HTTP 请求输入验证的实践指导,帮助在不同项目条件下选择合适的验证框架并正确集成。

主要能力:

  1. .NET 10 内置验证(AddValidation):基于源生成器,AOT 兼容,自动发现 Minimal API 处理程序参数中的可验证类型,通过端点过滤器自动执行验证。使用 builder.Services.AddValidation(); 注册,类型需标注 [ValidatableType] 且为 partial。注意该机制仅适用于 Minimal API,MVC 控制器仍走自身模型验证管线。
  2. FluentValidation:适合跨属性、条件、依赖数据库的复杂业务规则。通过 AddValidatorsFromAssemblyContaining<Program>(ServiceLifetime.Scoped) 注册;官方已弃用 ASP.NET 自动验证管线(FluentValidation 11 移除),推荐在处理程序或端点过滤器中手动调用 ValidateAsync,并用 TypedResults.ValidationProblem(result.ToDictionary()) 返回错误。
  3. Data Annotations:声明式特性([Required]、[Range]、[StringLength]、[RegularExpression]、[EmailAddress] 等),支持自定义 ValidationAttribute 与 IValidatableObject 跨属性校验。
  4. 端点过滤器:可编写泛型过滤器统一执行 Data Annotations 或 FluentValidation 校验,并可挂载到路由组。过滤器顺序中先注册者最外层,建议在日志之后、授权增强之前注册。
  5. 错误响应:使用 ProblemDetails(RFC 9457),通过 TypedResults.ValidationProblem()、AddProblemDetails()、IProblemDetailsService 统一错误格式。
  6. 安全验证:防范 ReDoS,建议使用 [GeneratedRegex] 并结合 RegexOptions.NonBacktracking 或超时。

使用方式:按项目需求选择框架,新项目优先 .NET 10 内置验证;规则复杂时用 FluentValidation;简单 DTO 用 Data Annotations。同一请求 DTO 不要混用多个框架。

适用场景:.NET Minimal API 与 MVC 的请求输入校验、复杂业务规则校验、统一 API 错误响应。

限制:Blazor 表单验证、OWASP 注入防护原则、架构层面的验证放置策略、Options 模式 ValidateDataAnnotations 均不在本技能范围内,需参考其他技能。Options 类需用 { get; set; } 而非 init,否则绑定后校验失败。ConfigureHttpJsonOptions 仅作用于 Minimal API,MVC 需用 AddControllers().AddJsonOptions(...)。