問題

  想要 ASP.NET Web API 執(zhí)行模型驗(yàn)證,同時(shí)可以和 ASP.NET MVC 共享一些驗(yàn)證邏輯。

解決方案

  ASP.NET Web API 與 ASP.NET MVC 支持一樣的驗(yàn)證機(jī)制,都是通過System.ComponentModel.DataAnnoataions 的屬性驗(yàn)證。使用框架提供的相關(guān)驗(yàn)證屬性,已足夠來用來驗(yàn)證模型。

想要更細(xì)粒度的驗(yàn)證,我們可以選擇在我們的模型中實(shí)現(xiàn) IValudateObject(來自于System.ComponentModel.DataAnnotations)。如果所有的屬性都驗(yàn)證通過,ASP.NET Web API 將會(huì)調(diào)用接口的Validate 方法,在這里我們可以進(jìn)行更進(jìn)一步的進(jìn)行實(shí)體驗(yàn)證。這是和 MVC 里面的行為一樣,并且,我們甚至可以在 Web API 和 MVC 中使用同一個(gè) DTO。

  還有另一種方法,就是可以使用一個(gè)叫做 FluentValidation(NuGet 中可以下載FluentValidation)的第三方程序庫,他可以構(gòu)建更強(qiáng)大的驗(yàn)證場(chǎng)景。在這樣的情況下,我們?nèi)匀恍柙谖覀兊哪P椭袑?shí)現(xiàn) IValidateObject 接口,同時(shí)需要依賴于FluentValidation 驗(yàn)證器,而不是內(nèi)嵌的驗(yàn)證邏輯。

小提示 ASP.NET Web API 的驗(yàn)證行為在跨宿主機(jī)上是相同的。

工作原理

  為了從 HTTP 請(qǐng)求 Body 中讀取的模型并執(zhí)行驗(yàn)證,ASP.NET Web API 依賴于一個(gè) IBodyModelValidator 的服務(wù)。接口的大致描述如清單 1-17 所示,然而,他是一個(gè)可替代的服務(wù),正常情況下,默認(rèn)實(shí)現(xiàn)(DefaultBodyModelValidator)足夠我們使用,在HttpConfiguration 被設(shè)置為自啟動(dòng)。

清單 1-17. IBodyModelValidator 接口

<dd id="v6dcb"></dd>

    我想了解如何學(xué)習(xí)

    姓名:
    手機(jī):
    留言: