我正在使用Newtonsoft.Json.Schema库,并使用自定义验证来生成自定义错误消息,这些错误消息本身是在模式中定义的。
"sku" : {
"type" : "string",
"message" : {
"required" : "The SKU is a required field",
},
"format" : "Required"
}
这很好,我可以在执行自定义验证时从给定架构中提取消息。
但是我想添加更多自定义验证,例如:
"sku" : {
"type" : "string",
"pattern" : "\d",
"message" : {
"required" : "The SKU is a required field",
"pattern" : "The SKU must be a number"
},
"format" : "Pattern" <--- can only specify a single custom validation
}
有没有办法让第二个自定义验证器运行以对必需和模式进行自定义验证?
(仅在此处提供一些背景信息...我们必须验证传入的数据,但是错误必须在数据所源自的业务上下文中有意义。该业务上下文是未知的,因此上下文相关的消息,例如因为必须以某种方式将错误提供给验证)。
答案 0 :(得分:0)
因此,最后,我进行了一个自定义验证,该自定义验证从自定义验证上下文创建了一个新的架构,如下所示:
JSchema valueSchema = JSchema.Parse(context.Schema.ToString() );
这将为自定义验证无需任何自定义验证调用处理的值创建一个新架构。必要步骤,因为context.Schema
中的现有架构包含对自定义验证的调用,如果不执行此操作,我们将陷入无限循环。
现在,我可以通过此本地模式运行值,并获取所有发生的错误的完整报告,并提供相关的自定义错误消息。
自定义错误消息的属性名称与验证错误中的给定ErrorType相匹配,从而使查找变得容易。