簡體   English   中英

沒有控制器的 Web API MVC 模型驗證

[英]Web API MVC model validation without controller

我們正忙於編寫一個應用程序,該應用程序使用即時驗證(onBlur、onClick 等)以及表單提交驗證。 “即時”檢查和表單提交重復使用相同的代碼來驗證用戶的輸入。 這是通過 MVC 的IValidatableObject接口完成的,它要求您覆蓋Validate方法以容納驗證代碼。

與此同時,我能夠合並一個驗證屬性,在進入控制器方法的實際實現之前檢查模型狀態:

[HttpPost]
[ValidateModel]
public void ValidateMyModel([FromBody] SomeModel model)
{
}

[HttpPost]
[ValidateModel]
public void SubmitMyModel([FromBody] SomeModel model)
{
   // Some code here
}

所有這些都按預期正確運行。

我遇到的問題是,因為一個 Controller 方法專門用於運行驗證(“即時”方式),而另一個完全致力於實際提交表單,所以不需要在 Controller 方法中運行的代碼做純驗證。 這最終導致方法的主體為空。 這不是干凈的代碼設計,而是通過屬性重新使用驗證代碼。 我也很不願意只運行包含提交代碼的“僅驗證”場景,因為這模糊了它的目的。

因此,我的問題是,在 MVC 中是否有一種方法可以在模型上運行驗證,而不必聲明控制器方法,同時仍然可以通過異步 HTTP 請求訪問?

在 MVC 中通過 HTTP 請求訪問某些內容的唯一方法是通過控制器方法。

你說“這不是干凈的代碼”,但為什么呢? 您有兩種具有不同目的的方法,它們向客戶端公開,但它們共享相同的可重用代碼來完成它們都需要的部分。 我可以看到沒有重復的業務或驗證邏輯,也沒有冗長或笨拙的解決方法。

恕我直言,它實際上效果很好,我不會改變你的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM