.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.pswp.cn/news/906941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906941.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue+threeJS 創建鏤空球體(SphereGeometry)

嗨&#xff0c;我是小路。今天主要和大家分享的主題是“vuethreeJS 創建鏤空球體&#xff08;SphereGeometry&#xff09;”。 上次看到一個做鏤空球體的項目&#xff0c;自己也準備嘗試著做一做。今天終于做完了&#xff0c;并對這個項目進行梳理。 鏤空球體示例效果…

Docker 鏡像打包到本地

保存鏡像 使用 docker save 命令將鏡像保存為一個 tar 文件。命令格式如下&#xff1a; docker save [options] IMAGE [IMAGE...]示例&#xff1a;docker save -o centos.tar centos:latest--output 或 -o&#xff1a;將輸出保存到指定的文件中。 加載鏡像 如果需要在其他機器…

前端常見的安全問題

跨站腳本攻擊(XSS) XSS&#xff08;跨站腳本攻擊&#xff0c;Cross-Site Scripting&#xff09;是一種通過在網頁中注入惡意腳本&#xff0c;從而竊取用戶數據或控制用戶行為的攻擊方式。注入的js跟網頁與原有的js具有同樣的權限&#xff0c;可以獲得server端數據、可以獲取co…

Spring Boot與Disruptor高性能隊列整合指南

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 一、Disruptor簡介 Disruptor是LMAX公司開發的高性能無鎖隊列框架&#xff0c;其核心設計通過以下特性實現卓越性能&#xff1a; 環形數組結構&#xff08;…

MongoDB CRUD操作完全指南:從入門到精通

在當今數據驅動的時代&#xff0c;數據庫管理系統扮演著至關重要的角色。作為最受歡迎的NoSQL數據庫之一&#xff0c;MongoDB以其靈活的數據模型、卓越的可擴展性和強大的查詢能力贏得了開發者的青睞。本文將全面介紹MongoDB的核心操作——CRUD&#xff08;創建、讀取、更新、刪…

2025/5/25 學習日記 linux進階命令學習

tree:以樹狀結構顯示目錄下的文件和子目錄&#xff0c;方便直觀查看文件系統結構。 -d&#xff1a;僅顯示目錄&#xff0c;不顯示文件。-L [層數]&#xff1a;限制顯示的目錄層級&#xff08;如 -L 2 表示顯示當前目錄下 2 層子目錄&#xff09;。-h&#xff1a;以人類可讀的格…

quickbi實現關聯度分析(復刻PowerBI展示)

quickbi實現關聯度分析&#xff08;復刻PowerBI展示&#xff09; PowerBI通過DAX創建度量值&#xff0c;可以比較輕松的實現不同產品的關聯度分析&#xff0c;即購物籃分析&#xff0c;但如果使用quickbi&#xff0c;則需要通過sql代碼創建一個數據集&#xff0c;然后再通過數…

git 把一個分支A的某一個 commit 應用到另一個分支B上

先記住分支 A 上你要應用的那個 commit <commit_id> checkout 到分支 B git cherry-pick <commit_id>完成

基于Python的分布式網絡爬蟲系統設計與實現

摘要 隨著互聯網信息爆炸性增長&#xff0c;大規模數據采集與分析需求日益增加。本文設計并實現了一套基于Python的分布式網絡爬蟲系統&#xff0c;采用圖形用戶界面實現便捷操作&#xff0c;集成異步IO技術與多線程處理機制&#xff0c;有效解決了傳統爬蟲在數據獲取、處理效…

一文講透golang channel 的特點、原理及使用場景

在 Go 語言中&#xff0c;通道&#xff08;Channel&#xff09; 是實現并發編程的核心機制之一&#xff0c;基于 CSP&#xff08;Communicating Sequential Processes&#xff09; 模型設計。它不僅用于協程&#xff08;Goroutine&#xff09;之間的數據傳遞&#xff0c;還通過…

PID項目---硬件設計

該項目是立創訓練營項目&#xff0c;這些是我個人學習的記錄&#xff0c;記得比較潦草 1.硬件-電路原理電賽-TI-基于MSPM0的簡易PID項目_嗶哩嗶哩_bilibili 這個地方接地是靜電的考量 這個保護二極管是為了在電源接反的時候保護電腦等設備 大電容的作用&#xff1a;當電機工作…

【分庫分表】理論基礎

目錄 為什么要分庫分表 垂直分 垂直分庫 垂直分表 垂直切分優缺點 優點 缺點 水平分 水平分庫 水平分表 水平切分優缺點 優點 缺點 為什么要分庫分表 分庫分表是一種場景解決方案&#xff0c;它的出現是為了解決一些場景問題的 單表過大的話&#xff0c;讀請求進…

UDP和TCP示例程序

查看自己的IP地址 以管理員身份運行cmd 輸入 ipconfig 復制圖中的IPv4地址 UDP通信程序 UdpReceiver.java import java.net.*;public class UdpReceiver {public static void main(String[] args) {// 監聽端口&#xff08;需與發送端保持一致&#xff09;int listenPort…

Double使用注意事項

目錄 數據精度問題BigDecimal的正確使用構造陷阱數值比較除法舍入控制 RoundingMode 數據精度問題 Java開發中&#xff0c;Double類作為包裝類用于處理雙精度浮點數。浮點數double無法精確表示某些十進制小數&#xff08;如0.1&#xff09;&#xff0c;導致運算結果出現誤差 …

8.2 線性變換的矩陣

一、線性變換的矩陣 本節將對每個線性變換 T T T 都指定一個矩陣 A A A. 對于一般的列向量&#xff0c;輸入 v \boldsymbol v v 在空間 V R n \pmb{\textrm V}\pmb{\textrm R}^n VRn 中&#xff0c;輸出 T ( v ) T(\boldsymbol v) T(v) 在空間 W R m \textrm{\pmb W}\…

【后端高階面經:微服務篇】5、限流實戰:高并發系統流量治理全攻略

一、限流閾值的三維度計算模型 1.1 系統容量基準線:壓測驅動的安全水位 1.1.1 壓力測試方法論 測試目標:確定系統在資源安全水位(CPU≤80%,內存≤70%,RT≤500ms)下的最大處理能力測試工具: 單機壓測:JMeter(模擬10萬并發)、wrk(低資源消耗)集群壓測:LoadRunner …

同一無線網絡下的設備IP地址是否相同?

在家庭和辦公網絡普及的今天&#xff0c;許多人都會好奇&#xff1a;連接同一個Wi-Fi的設備是否共享相同的IP地址&#xff1f;這個問題看似簡單&#xff0c;實則涉及多個角度。本文將為您揭示其中的技術奧秘。 用一個無線網IP地址一樣嗎&#xff1f;同一無線網絡&#xff08;如…

git push出現 “HTTP 400 curl 22 The requested URL returned error: 400...“錯誤

錯誤內容是&#xff1a; 錯誤&#xff1a;RPC 失敗。HTTP 400 curl 22 The requested URL returned error: 400 send-pack: unexpected disconnect while reading sideband packet 致命錯誤&#xff1a;遠端意外掛斷了 檢查發現&#xff1b;文件大小5M&#xff0c;遠低于100M&a…

對WireShark 中的UDP抓包數據進行解析

對WireShark 中的UDP抓包數據進行解析 本文嘗試對 WireShark 中抓包的 UDP 數據進行解析。 但是在嘗試對 TCP 中的 FTP 數據進行解析的時候&#xff0c;發現除了從端口號進行區分之外&#xff0c; 沒有什么好的方式來進行處理。 import numpy as np import matplotlib.pyplot …

云原生安全基石:Linux進程隔離技術詳解

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、基礎概念 進程隔離是操作系統通過內核機制將不同進程的運行環境和資源訪問范圍隔離開的技術。其核心目標在于&#xff1a; 資源獨占&#xff1a;確保…