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能够在保持简洁的同时,提供强大而可靠的验证支持。
当前还属于早期预览版本,可能后续正式版本的发布还会有些许变化,前期了解即可,待正式发布再用于生产~
我们一起期待正式版的早日到来!
Aspnet Core 10 Preview3已对最小API提供参数验证支持的更多相关文章
- 为 ASP.NET Core (6.0)服务应用添加ApiKey验证支持
这个代码段演示了如何为一个ASP.NET Core项目中添加Apikey验证支持. 首先,通过下面的代码创建项目 dotnet new webapi -minimal -o yourwebapi 然后 ...
- 从 MVC 到使用 ASP.NET Core 6.0 的最小 API
从 MVC 到使用 ASP.NET Core 6.0 的最小 API https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/ 2007 年,随着 ...
- AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- AspNet Core Api Restful +Swagger 实现微服务之旅 (三)
(1) 访问Rest ful接口时 Token验证 返回数据格式封装 (一)访问时Token验证 返回数据格式封装 1.1访问Api接口 方法 实现 1.1.1 创建访问Rest ...
- AspNet Core Api Restful +Swagger 发布IIS
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- AspNet Core Api Restful 实现微服务之旅 (一)
(一)了解微服务(二)搭建VS项目框架 (三)创建AspNet Core Api VS2017 安装包 链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...
- 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等
设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...
- ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...
- 【AspNet Core】Nuget代理网站
因为访问Nuget太慢,在Dotnet Core RC2发布前,我就基于Asp.Net做了一个Nuget代理网站 这是网站地址:http://nuget.lzzy.net/ Nuget源:http:/ ...
- 【翻译】在Visual Studio中使用Asp.Net Core MVC创建第一个Web Api应用(二)
运行应用 In Visual Studio, press CTRL+F5 to launch the app. Visual Studio launches a browser and navigat ...
随机推荐
- Vue项目实战:构建你的第一个项目
Vue项目实战:从零到一构建你的第一个应用 准备工作 在开始使用Vue之前,请确保您已经安装了Node.js 16.0或更高版本.Node.js是运行Vue项目所必需的JavaScript运行环境. ...
- 薄荷面 Bohemian
我回来了.正如柯洁回到B站. 然后 我将使用知乎格式写作(指换行空一行) 因为<阑山>太长了,有二三十万字,一时半会儿摸不完,同时还在摸几篇短篇小说,还要搞一些什么新概念大赛.冰心作文之类 ...
- Q:查看锁表进程,及杀死所有锁表进程sql
查看锁表进程 SELECT DISTINCT decode(s.inst_id, 1, 'DB1', 2, 'DB2') 数据库服务器, decode(s.BLOCKING_SESSION, '', ...
- VsCode 配置python开发环境
一.配置环境 1.选择python解释器版本 输入:Command+shift+P 搜索:Python: Select Interpreter 2.安装包 指定版本: pip install PyHi ...
- LeetCode 题解大全
项目说明 LeetCode 系列题解致力于帮助程序员更好地理解和掌握算法思维,内容包含详细的解题思路分析.图文并茂的示例讲解和完整的代码实现. LeetCode 最全题解:持续更新中,欢迎 Star ...
- Java8 stream 提取对象 List 中的某一字段生成新的 List
//输出List StudentInfo.printStudents(studentList); //从对象列表中提取一列(以name为例) List<String> nameList = ...
- dx12学习之旅-
记录一下,第一篇博客2024年7月26日下午. 计划在毕业后从事游戏开发的工作,现在在学习龙书dx12,平时会写一些对龙书内容上的一些理解.在读完全书之后,会考虑进行一次龙书相关的总结,不过这应该要很 ...
- Vue3 路由配置与导航全攻略:从零到精通
在现代前端开发中,单页应用(SPA)已经成为主流趋势.而作为 Vue.js 的核心功能之一,Vue Router 提供了强大的路由管理能力,帮助开发者轻松构建流畅.高效的单页应用.本文将带你深入探讨 ...
- [第三章]ABAQUS CM插件中文手册
ABAQUS Composite Modeler User Manual(zh-CN) Dassault Systèmes, 2018 注: 源文档的交叉引用链接,本文无效 有些语句英文表达更易理解, ...
- PPT-产品页图片并茂
一.好的文案原则 图片并茂 -重点突出 二.操作 抠图 拷贝图片到ppt页面->选中图片->双击删除背景->标记要删除的区域 背景替换 1.复制图片->粘贴->置于底层 ...