小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Asp.Net Web API 2第十五課——Model Validation(模型驗(yàn)證)

 昵稱10504424 2013-12-24

前言

閱讀本文之前,您也可以到Asp.Net Web API 2 系列導(dǎo)航進(jìn)行查看 http://www.cnblogs.com/aehyok/p/3446289.html

本文參考鏈接文章地址http://www./web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api

當(dāng)客戶端發(fā)送數(shù)據(jù)給你的Web API時,你通常希望在做其它處理之前先對數(shù)據(jù)進(jìn)行驗(yàn)證。

Data Annotations——數(shù)據(jù)注解

在ASP.NET Web API中,你可以使用System.ComponentModel.DataAnnotations命名空間的注解屬性來設(shè)置模型屬性的驗(yàn)證規(guī)則??紤]以下模型:

如果你曾在ASP.NET MVC中使用過模型驗(yàn)證,這看上去是類似的。Required注解屬性說明Name屬性必須不為空。Range注解屬性說明Weight必須在0-999之間。

假設(shè)客戶端發(fā)送了一個帶有下列JSON表示的POST請求:

你可以看出,客戶端并未包含被標(biāo)記成required的Name屬性。當(dāng)Web API將該JSON轉(zhuǎn)換成Product實(shí)例時,它會根據(jù)這些驗(yàn)證注解屬性對Product進(jìn)行驗(yàn)證。在控制器動作中,你可以檢查該模型是否有效:

模型驗(yàn)證并不保證客戶端數(shù)據(jù)是安全的。在應(yīng)用程序的其它層面可能會需要附加驗(yàn)證(例如,數(shù)據(jù)層可能會強(qiáng)制外鍵約束)。

此處,客戶端并未指定Price或Weight的值。JSON格式化器會將默認(rèn)值(這里是零)賦給這些缺失的屬性。

Under-Posting(遞交不足)”:當(dāng)客戶端遺漏了某些屬性時,便會發(fā)生“Under-posting”。例如,假設(shè)客戶端發(fā)送如下:

此時模型的狀態(tài)是有效的,因?yàn)榱闶沁@些屬性的有效值。這是否是一個問題取決于你所處的場景。例如,在一個更新操作中,你可能希望區(qū)分出“零”與“未設(shè)置”。為了強(qiáng)迫客戶端要設(shè)置一個值,將該屬性構(gòu)造成nullable(可空的),并設(shè)置Required注解屬性:

Over-Posting(過份遞交)”:客戶端也可能發(fā)送比期望還多的數(shù)據(jù)。例如:

此處,JSON包含了Product模型中存在的屬性(“Color”)。在這種情況下,JSON格式化器會簡單地忽略該值(XML格式化器卻不同)。若你的模型具有只讀屬性,Over-posting會產(chǎn)生問題。例如:

如果你不想讓用戶對IsAdmin屬性進(jìn)行更新,并將其提升給管理員。最安全的策略是使用一個與允許客戶端發(fā)送嚴(yán)格匹配的模型類:

Handling Validation Errors——處理驗(yàn)證錯誤

當(dāng)驗(yàn)證失敗時,Web API并不會自動地將錯誤返回給客戶端。這取決于控制器動作對模型狀態(tài)及響應(yīng)進(jìn)行適當(dāng)?shù)臋z查。

你也可以創(chuàng)建一個動作過濾器,以便在控制器動作被調(diào)用之前,檢查模型的狀態(tài)。以下代碼演示了一個例子:

如果模型驗(yàn)證失敗,此過濾器會返回一個含有驗(yàn)證錯誤的HTTP響應(yīng)。在此情況下,不會調(diào)用控制器動作。

如果你正在使用CodePlex上最新版的Web API,可以使用HttpError類將驗(yàn)證錯誤返回給客戶端。HttpError類在RC版(指Web API的預(yù)覽版)中無效。

你可以將此過濾器全局性地運(yùn)用于所有Web API控制器。在Application_Start方法中,將此過濾器添加到HttpConfiguration.Filters集合:

另一種可選辦法是,通過將此過濾器作為注解屬性進(jìn)行添加,你可以將它運(yùn)用于個別控制器或控制器動作:

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多