使用ASP.NET Core 3.x 構建 RESTful API - 5.1 輸入驗證


說到驗證,那就需要做三件事: 

  • 定義驗證規則 

  • 按驗證規則進行檢查 

  • 報告驗證的錯誤。在把錯誤報告給API消費者的時候,報告里並不包含到底是服務端還是API消費者引起的錯誤,這是狀態碼的工作。而通常響應的Body里面會包含一組驗證錯誤信息,API消費者可以把這些信息展示給API消費者的用戶。 

 

定義驗證規則 

想要定義驗證規則,我們可以使用ASP.NET Core內置的方式或者使用第三方庫。 

ASP.NET Core里面,驗證規則可以通過以下的方式來進行定義: 

  • Data Annotations。例如 [Required][MaxLength]等等。 

  • 自定義Atrribute 

  • 實現IValidatableObject接口。 

 

驗證什么? 

驗證的是輸入數據,而不是輸出數據。例如POST請求Body里面的參數就需要進行驗證,而GET請求返回響應里面的內容就不需要驗證了。 

 

按驗證規則進行檢查 

ASP.NET Core 內置了一個 ModelState對象,它用來做驗證規則檢查。 

  • ModelState對象是一個Dictionary(字典),它既包含model的狀態,又包含model的綁定驗證信息。 

  • 它也包含針對每個提交的屬性值的錯誤信息的集合。每當有請求進來的時候,定義好的驗證規則就會被檢查。 

 

如果有一個規則驗證不通過的話,那么ModelState.IsValid()方法就會返回false。而且如果傳進來的屬性的類型不正確的話,該方法也會返回false 

 

報告驗證錯誤信息 

由於驗證錯誤肯定是由客戶端引起的,所以返回的狀態碼肯定是4xx。針對驗證錯誤,具體的就是422 Unprocessable entity 這個狀態碼。 

之前也講過 422 表示服務器理解了entityContent-Type,並且語法也正確,但是仍然無法處理所包含的結構數據。例如:語法正確,但是語義不正確。 

 

當報告驗證錯誤信息的時候,我們不僅要使用正確的狀態碼,還需要在響應的body里面包含驗證錯誤信息。 

REST並沒有規定返回的錯誤信息的格式,但是有一個標准卻規定了此事:Validation Problem Details RFC,它定義了這樣的響應的body應該是什么樣的。ASP.NET Core內置了對這個標准的支持,后續視頻教程中可以看到。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM