qidao123.com技术社区-IT企服评测·应用市场
标题:
Aspnet Core 10 Preview3已对最小API提供参数验证支持
[打印本页]
作者:
道家人
时间:
2025-4-11 18:11
标题:
Aspnet Core 10 Preview3已对最小API提供参数验证支持
前言
相信大家都或多或少用上了Minimal API,快速简洁,性能炸裂,是快速开发API端口的不二之选!但是呢如今正式版为止 最小API还并不内置支持对哀求参数的内置验证支持,比如[Required],大概任何必要验证的地方,往往我们要实现这样的逻辑都必须自主扩展一个EndpointFilter,这个在NET社区也算是一个不大不小的槽点,不过呢MS总算是千呼万唤始出来,在NET10的第三个预览版提供了对System.ComponentModel.DataAnnotations内置验证支持!
体验
安装升级到最新释出的NET10Preview3,然后完成下面操作:
builder.Services.AddValidation();
复制代码
在项目文件(.csproj)中配置 InterceptorsNamespaces 属性以启用自动生成的拦截器。示例配置如下:
<PropertyGroup>
<InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>
</PropertyGroup>
复制代码
然后源生成器就可以工作了,会自动发现验证类型 实现机制会自动查找在最小 API 处理步伐中定义的类型或其基类型中所配置的验证属性,并在每个终端节点上通过添加的终端节点筛选条件执行验证。这种方式大大简化了开发者的工作量,无需手动编写验证逻辑。
比如下面的API定义:
app.MapPost("/products",
([EvenNumber(ErrorMessage = "产品ID必须")] int productId, [Required] string name)
=> TypedResults.Ok(productId))
复制代码
如果产物ID未传,大概name为空那么将会返回 HTTP 400 Bad Request的错误!
如果必要排除这个Endpoint的参数验证只必要添加上.DisableValidation()即可:
app.MapPost("/products",
([EvenNumber(ErrorMessage = "产品ID必须")] int productId) => TypedResults.Ok(productId))
.DisableValidation();
复制代码
当然了除了内置于System.ComponentModel.DataAnnotations的验证特性之外,你完全可以扩展自己的验证特性,比如和业务相关的复杂验证环境,只必要实现IValidatableObject接口即可,也可以继续自ValidationAttribute实现一些简朴的个性化验证
末了
验证支持机制使 MinimalAPI 能够在哀求数据进入业务逻辑之前自动执行验证,从而提高安全性和代码维护性。同时,开发者既可以利用内置的验证功能,也可以通过自定义验证属性和接口实现来满足特定业务需求。通过这种灵活的设计,ASP.NET Core 的MinimalAPI能够在保持简洁的同时,提供强大而可靠的验证支持。
当前还属于早期预览版本,可能后续正式版本的发布还会有些许变革,前期相识即可,待正式发布再用于生产~
我们一起期待正式版的早日到来!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4