前言

相信大家都或多或少用上了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提供参数验证支持的更多相关文章

  1. 为 ASP.NET Core (6.0)服务应用添加ApiKey验证支持

    这个代码段演示了如何为一个ASP.NET Core项目中添加Apikey验证支持. 首先,通过下面的代码创建项目 dotnet new webapi -minimal -o yourwebapi 然后 ...

  2. 从 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 年,随着 ...

  3. AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  4. AspNet Core Api Restful +Swagger 实现微服务之旅 (三)

    (1)  访问Rest ful接口时 Token验证  返回数据格式封装 (一)访问时Token验证  返回数据格式封装 1.1访问Api接口 方法 实现         1.1.1 创建访问Rest ...

  5. AspNet Core Api Restful +Swagger 发布IIS

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  6. AspNet Core Api Restful 实现微服务之旅 (一)

    (一)了解微服务(二)搭建VS项目框架  (三)创建AspNet Core Api VS2017 安装包   链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...

  7. 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等

    设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...

  8. 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 ...

  9. 【AspNet Core】Nuget代理网站

    因为访问Nuget太慢,在Dotnet Core RC2发布前,我就基于Asp.Net做了一个Nuget代理网站 这是网站地址:http://nuget.lzzy.net/ Nuget源:http:/ ...

  10. 【翻译】在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 ...

随机推荐

  1. JavaScript操作DOM元素的classList

    在JavaScript中,classList 是一个DOM元素属性,它提供了一组方法来添加.移除和切换元素的类名.classList 属性返回一个 DOMTokenList 集合,表示元素的类名. 这 ...

  2. Nginx设置HTTPS监听

    原文链接:https://blog.liuzijian.com/post/03708e47-03bd-4efe-a569-16f0eedc6158.html 1. 获取 SSL 证书 首先,你需要获取 ...

  3. 开源标杆!天翼云TeleDB入选《2024央国企开源项目典型实践》!

    近日,由中国通信标准化协会主办.中国信通院承办的2024 OSCAR开源产业大会在北京召开,会上发布<2024央国企开源项目典型实践>,天翼云科技有限公司打造的"TeleDB分布 ...

  4. 如何利用cursor+deepseek来最大程度减少组件库的学习成本!

    在当今的软件开发领域,开发者们面临着不断提升开发效率与降低上手成本的挑战.本文档的核心目的,便是助力开发者们实现这一目标,特别是通过巧妙运用组件官网文档,并结合 Cursor 与 DeepSeek 等 ...

  5. calcite-avatica数据传输时对日期类型压缩,导致客户端展示数据异常问题排查

    一.背景 用户使用如下sql来获取周开始和结束时间,直连presto查询该sql,得到的week_start=2019-12-30,而通过calcite-avatica查询出结果为week_start ...

  6. scala - [01] 概述

    题记部分 001 || 介绍 (1)Spark -- 新一代内存级大数据计算框架,是大数据的重要内容 (2)Spark就是使用Scala编写的.因此为了更好的学习Spark,需要掌握Scala. (3 ...

  7. Jsoncpp的安装与使用方式

    JsonCpp 是一个C++库,用于解析和生成JSON数据.它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式. 安装Jsoncpp 我们可以输入以下命令安装jsoncp ...

  8. 【Abaqus】*Solid Section定义复合材料

    *SOLID SECTION 介绍 *solid section 用来定义单元的材料属性,材料方向等信息: solid (continuum) elements infinite elements a ...

  9. jmespath 使用及案例

    什么是jmespath jmespath 是python里面的一个库 主要在httprunner框架里使用 2.使用语法 列表: with_jmespath(jmes_path,var_name) m ...

  10. 带大家做了个 AI 项目,没想到这么简单!

    大家好,我是程序员鱼皮,现在已经是全民 AI 时代了,咱们程序员更要想办法榨干 AI,把 AI 利用起来.前几天我一时兴起,直播用 2 多个小时的时间,从需求分析开始,带大家做了一个 AI 海龟汤游戏 ...