如何告诉 FluentValidation 不要检查请求中未包含字段的子字段的规则?
How to tell FluentValidation not to check rules for subfields of fields not included in the request?
我正在使用 FluentValidation 版本 9.2.2。
我收到以下消息:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Json:
{ "geographyInfo": {
"CountryCode": "UK" } }
RuleFor(x => x.Request.GeographyInfo)
.NotEmpty()
.WithMessage("GeographyInfo missing. Expected: object of type GeoInfo.")
.WithErrorCode("123")
.WithName("geographyInfo");
RuleFor(x => x.Request.GeographyInfo.CountryCode)
.NotEmpty()
.WithMessage("Field geographyInfo.CountryCode is missing. Expected: 3 digit code")
.WithErrorCode("13")
.WithName("countryCode");
问题是,如果我像这样发送 json:
Json:
{ }
(没有地理信息),我收到 NullReferenceException,而我预计会出现“缺少 GeographyInfo。预期:GeoInfo 类型的对象。”
我认为 FluentValidation 会继续并检查第二条规则:在字段 x.Request.GeographyInfo.CountryCode 上,但在这种情况下我们没有 x.Request.GeographyInfo,所以它没有意义进一步参考国家代码。
如何告诉 FluentValidation 不要检查他找不到的字段的子字段的规则? (未包含在请求中)
对于您的特定情况,您可以指示 FluentAPI 在第一次失败时跳过执行:
ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure;
或者,您可以使用 When 方法首先检查对象是否为空:
When(x => x.Request.GeographyInfo != null, () => {
RuleFor(x => x.Request.GeographyInfo.CountryCode)
.NotEmpty()
.WithMessage("Field geographyInfo.CountryCode is missing. Expected: 3 digit code")
.WithErrorCode("13")
.WithName("countryCode");
});
我正在使用 FluentValidation 版本 9.2.2。 我收到以下消息:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Json:
{ "geographyInfo": { "CountryCode": "UK" } }
RuleFor(x => x.Request.GeographyInfo)
.NotEmpty()
.WithMessage("GeographyInfo missing. Expected: object of type GeoInfo.")
.WithErrorCode("123")
.WithName("geographyInfo");
RuleFor(x => x.Request.GeographyInfo.CountryCode)
.NotEmpty()
.WithMessage("Field geographyInfo.CountryCode is missing. Expected: 3 digit code")
.WithErrorCode("13")
.WithName("countryCode");
问题是,如果我像这样发送 json: Json:
{ }
(没有地理信息),我收到 NullReferenceException,而我预计会出现“缺少 GeographyInfo。预期:GeoInfo 类型的对象。”
我认为 FluentValidation 会继续并检查第二条规则:在字段 x.Request.GeographyInfo.CountryCode 上,但在这种情况下我们没有 x.Request.GeographyInfo,所以它没有意义进一步参考国家代码。
如何告诉 FluentValidation 不要检查他找不到的字段的子字段的规则? (未包含在请求中)
对于您的特定情况,您可以指示 FluentAPI 在第一次失败时跳过执行:
ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure;
或者,您可以使用 When 方法首先检查对象是否为空:
When(x => x.Request.GeographyInfo != null, () => {
RuleFor(x => x.Request.GeographyInfo.CountryCode)
.NotEmpty()
.WithMessage("Field geographyInfo.CountryCode is missing. Expected: 3 digit code")
.WithErrorCode("13")
.WithName("countryCode");
});