当前位置: 首页 > news >正文

.NET 10 - 尝试一下Minimal Api的Validation新特性

1.简单介绍

2025年11月微软将会发布.NET10,这是LTS(Long Term Support)版本。当前.NET10已经处于Preview4版本,微软对Runtime, Library, SDK, C#, Asp.NET Core, MAUI等都做了很多enhancement。近些年微软对Minimal Api一直在持续地更新。在.NET8中, Minimal Api新增的feature有支持文件上传,同时支持form数据绑定,在.NET10中,Minimal Api支持数据验证,可以对提交的数据(来自Query, Header, Requset Body)进行格式,范围,必填等限制,也可以自定义验证逻辑(通过继承ValidationAttribute或者implement IValidatableObject接口来实现)。

这边将尝试一下.NET 10中Minimal Api Validation新特性

2.具体说明

2.1 创建Minimal Api项目

1) 基于.NET10创建Minimal Api项目

2) 在项目文件中,添加InterceptorsNamesapces

        

<InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>

 3) 在Program中,添加如下语句

builder.Services.AddValidation();

2.2 定义todo类

分别对Name和DueDate property进行限制,使用的attribute都是来自namespace System.ComponentModel.DataAnnotations的,代码如下 

    public class Todo{[Required]public string Name { get; set; } = string.Empty;[Range(typeof(DateTime), "5/1/2025", "5/26/2025", ErrorMessage = "Value for {0} must be between {1} and {2}")]public DateTime DueDate { get; set; } = DateTime.Now.Add(TimeSpan.FromDays(1));}

2.3 尝试Validation

1) 添加一个post endpoint,并且设定Todo类型的参数,使用[FromForm] attribute标注一下, 

app.MapPost("/todos", ([FromForm] Todo todo) => todo);

2) 添加一个get endpoint,客户端可以获取到表单。当表单提交时,form字段将会绑定到Todo参数中

app.MapGet("/todoform", (HttpContext context, IAntiforgery antiforgery) =>
{var token = antiforgery.GetAndStoreTokens(context);var html = $$"""<html><head><style>body {font-family: Arial, sans-serif;margin: 20px;}form {max-width: 400px;margin: 0 auto;}...</style></head><body><form action="/todos" method="POST" enctype="multipart/form-data"><input name="{{token.FormFieldName}}" type="hidden" value="{{token.RequestToken}}" /><label for="name">Todo Name:</label><input type="text" name="name" /><label for="dueDate">Due Date:</label><input type="date" name="dueDate" /><input type="submit" /></form></body></html>""";return Results.Content(html, "text/html");
});

2.4 运行一下

1) 客户端通过访问上面步骤得到表单后,如果没有输入Todo Name的值,点击Submit按钮提交后,页面会显示Required Validation相关错误信息,如下图所示,

        

                

2) 如果设定的Due Date的值超出2025/5/1-2025/5/26这个范围,则页面也会显示相关的验证错误信息,

        

            

 note, Minimal Api的数据验证,也支持嵌套验证的,

 比如Todo类包含一个Approver类型的property,如下图所示,这种嵌套数据验证也是支持的

        

3.总结

本文简单记录了一下.NET10中Minimal Api的数据验证的使用过程。如果.NET10自带的Validation不能满足业务需求,也可以通过继承ValidationAttribute或者implement IValidatableObject接口来进行定制的。.NET10是LTS版本,目前新特性正在持续更新中,还需继续跟着微软进行学习一下。

本文如果哪里有错误,麻烦告之,谢谢谢谢!

http://www.xdnf.cn/news/543061.html

相关文章:

  • 开源一个记账软件,支持docker一键部署
  • APPtrace 智能参数系统:重构 App 用户增长与运营逻辑
  • C++中String类
  • 《经济日报》深度聚焦|珈和科技携手万果博览荟共筑智慧农业新示范高地 全链赋能蒲江茶果产业数字化转型升级
  • 榕壹云上门家政系统:基于Spring Boot+MySQL+UniApp的全能解决方案
  • 深度剖析ZooKeeper
  • 基于大模型与人工智能体的机械臂对话式交互系统RobotAgent
  • 阿里云CDN刷新预热--刷新URL
  • 【AI 大模型】盘古大模型简介 ( 创建空间 | 体验模型 | 部署模型 )
  • 【华为OD-B卷-打印文件 100分(python、java、c++、js、c)】
  • 面试算法刷题3(核心+acm)
  • LVS原理详解及LVS负载均衡工作模式
  • Java的线程池相关的几个问题
  • Python 训练营打卡 Day 20-奇异值SVD分解
  • STM32F103_LL库+寄存器学习笔记12.2 - 串口DMA高效收发实战2:进一步提高串口接收的效率
  • Java实现基于bitmap的字符串去重统计
  • 鸿蒙路由参数传递
  • sqlite
  • Django快速入门篇
  • 基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联
  • 2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)
  • sqlite的拼接字段的方法(sqlite没有convert函数)
  • STL中list的模拟
  • React 第四十三节 Router中 useBlocker 的使用详解及案例注意事项
  • 深入解析Spring Boot与Kafka的集成实践
  • kafka入门(二)
  • [创业之路-369]:企业战略管理案例分析-9-战略制定-差距分析的案例之华为
  • 「华为」持续加码人形机器人赛道!
  • 动态规划之爬楼梯模型
  • 如何将内网的IP地址映射到外网?常见方法及详细步骤