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版本,目前新特性正在持續更新中,還需繼續跟著微軟進行學習一下。
本文如果哪里有錯誤,麻煩告之,謝謝謝謝!