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项目
-
基于.NET10创建Minimal Api项目
-
在项目文件中,添加InterceptorsNamesapces

<InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>
-
在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
-
添加一个post endpoint,并且设定Todo类型的参数,使用FromForm attribute标注一下,
app.MapPost("/todos", ([FromForm] Todo todo) => todo);
-
添加一个get endpoint,客户端可以获取到表单。当表单提交时,form字段将会绑定到Todo参数中
app.MapGet("/todoform", (HttpContext context, IAntiforgery antiforgery) =>
{
var token = antiforgery.GetAndStoreTokens(context);
var html = $$"""