簡體   English   中英

ASP.NET Web API十進制驗證

[英]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將無效,但在這種情況下,也會出現您不希望存在的前綴。

DefaultBodyModelValidatorValidate方法具有此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.

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