簡體   English   中英

JObject 屬性上的 FluentValidation 以驗證 MustBeSafeJson()

[英]FluentValidation on JObject property to validate MustBeSafeJson()

JObject 屬性MyCustomField將具有 json 數據。 我需要使用MustBeSafeJson()MaximumLength(500)進行驗證。 我不確定什么是正確的語法。 我嘗試了以下方法,但對於任何語法它都會引發相同的錯誤。 這是一個 ASP.Net Core Web Api 應用程序。

public class MyClass
{
    public int Id { get; set; }
    public JObject MyCustomField { get; set; }
}


RuleFor(x => x.MyCustomField).  //does not show any of the validation choices like MustBeSafeJson()

試過了

RuleFor(x => x.MyCustomField.ToSerializedString()).MustBeSafeJson();
RuleFor(x => x.MyCustomField.ToString()).MustBeSafeJson();

錯誤信息

Error
    "errorModel:"{
        "value":{
            "":[
                "'' cannot contain certain symbol characters."
            ]
        }
    }

我不清楚MustBeSafeJson()應該做什么。 但是您可以使用以下代碼在JObject上編寫自己的驗證。

 public MyClass_Validation()
 {
     RuleFor(x => x.MyCustomField).Must(x => SAFE_JSON(x, 500));
 }


 private bool SAFE_JSON(JObject arg,int maxSize = 1024)
 {
     ///ValidationLogic goes here      
 }

我如何在評論中告訴您,您應該將 json 字符串傳遞給驗證器或在其中序列化它,請遵循一個完整的示例:

public class Program
{
    public static void Main()
    {
        var myClass = new MyClass
        {
            MyCustomField = new JObject
            {
                { "FieldA", "A" },
                { "FieldB", "B" }
            }
        };
        var result = new Validator().Validate(myClass);
    }
}

public class MyClass
{
    public int Id { get; set; }
    public JObject MyCustomField { get; set; }
}

public class Validator : AbstractValidator<MyClass>
{
    public Validator()
    {
        RuleFor(x => x.MyCustomField).Must(MustBeSafeJson);
    }

    private bool MustBeSafeJson(JObject arg)
    {
        var jsonString = JsonConvert.SerializeObject(arg);
        return RunValidatingRules(jsonString);
    }

    private bool RunValidatingRules(string jsonString)
    {
        //execute your rules
        throw new NotImplementedException();
    }
}

要查看您的驗證結果,只需檢查 Errors 屬性result.Errors 如果result.IsValid返回false,就會有東西

暫無
暫無

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

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