簡體   English   中英

如何使用數據注釋為模型屬性 WebApi .NET Core 添加布爾驗證

[英]How to add Boolean validation for a model property WebApi .NET Core using data annotation

我正在嘗試使用注釋驗證以下屬性,它應該是 true 還是 false

public bool Info { get; set; }

如果我像下面這樣傳遞 json,我會得到一個無效的數據驗證錯誤

{  
  "info": trues
}

但奇怪的是,如果我像下面一樣通過,沒有數據驗證。

 { "info": 12345 }

我曾嘗試使用如下所示的ValidationAttribute ,但即使 val 為12345也始終為

public class IsBoolAttribute : ValidationAttribute
{
    //public override bool RequiresValidationContext => true;

    public override bool IsValid(object value)
    {

        if (value == null) return false;
        if (value.GetType() != typeof(bool)) return false;
        return (bool)value;
    }
}

如果您在 Startup.cs 中使用 Newtonsoft.Json,它似乎按照設計將隨機整數轉換為true 您可以編寫一個自定義的 JsonConverter,如下所示:

public class CustomBoolConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var value = reader.Value;

        if (value.GetType() != typeof(bool))
        {
            throw new JsonReaderException("The JSON value could not be converted to System.Boolean.");
        }
            return value;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value as string);
    }
}

啟動文件

services.AddControllers()
            .AddNewtonsoftJson();

替代方法,您可以使用System.Text.Json ,這是自 ASP.NET Core 3.0 以來的默認設置,Startup.cs 如下所示:

services.AddControllers();
        //.AddNewtonsoftJson();

當您輸入不正確的值時,它將返回以下錯誤: 在此處輸入圖片說明

暫無
暫無

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

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