[英]ASP.NET Web API decimal validation
我們有以下內容
public class Model
{
[Required]
public decimal Cost { get;set; }
}
當我們收到無效值,例如“dasd”或其他任何值時,我返回BadRequest:
public HttpResponseMessage Post(Model data)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
但在回應中,json看起來像:
{
"message": "The request is invalid.",
"modelState": {
"data.cost": ["Could not convert string to decimal: dasd. Path 'cost', line 1, position 181."],
}
}
首先,我該如何擺脫數據。 字首?
此外,我想實現一個自定義驗證器,類似於MustBeDecimal屬性,可以讓我返回更多用戶友好的錯誤消息。
Web API框架將“dasd”綁定到小數,但它失敗,因為無法將“dasd”轉換為decimal。 顯然,綁定必須在驗證之前發生。 如果您將十進制更改為字符串,綁定將是正常的,您的正則表達式驗證將運行,並且ModelState將無效,但在這種情況下,也會出現您不希望存在的前綴。
DefaultBodyModelValidator
的Validate
方法具有此keyPrefix
參數,該參數用於創建前綴。 不幸的是,此方法未標記為虛擬,您可以覆蓋。 所以,你需要做一些像這樣 (見第一部分)。
您可以在RegularExpression
數據注釋屬性上設置錯誤消息。 你有什么理由不能用這個嗎?
public class Model
{
[Required]
[RegularExpression(@"^\d+.\d{0,2}$",ErrorMessage = "You didn't enter a decimal!")]
public decimal Cost { get;set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.