【问题标题】:FluentValidation on JObject property to validate MustBeSafeJson()JObject 属性上的 FluentValidation 以验证 MustBeSafeJson()
【发布时间】:2021-05-29 19:38:27
【问题描述】:

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."
            ]
        }
    }

【问题讨论】:

  • 你不能在验证器之外反序列化JObject,然后传递字符串进行验证吗?如果没有,您可以使用 Must() 方法进行验证,在此您必须反序列化您的 JObject,然后运行您的验证规则
  • 如果不清楚我可以创建一个示例

标签: c# asp.net-core-webapi fluentvalidation


【解决方案1】:

我不清楚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      
 }

【讨论】:

  • 我有一个方法 "bool JsonValidator.IsSafeText(JObject arg, int maxSize = 1024)" 我正在尝试像你的示例 RuleFor(x => x.MyCustomField).Must(JsonValidator.安全文本);它抛出“参数 2:无法从 '方法组' 转换为 'Func'
【解决方案2】:

我如何在 cmets 中告诉你,你应该将一个 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.IsValidreturns false,就会有事

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多