gpt4 book ai didi

c# - 如何摆脱流畅的 ValidationResult 的 PropertyName 中的点

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:22 24 4
gpt4 key购买 nike

我正在使用流畅的验证,我已经将一些常见的电子邮件地址验证规则提取到自定义电子邮件验证器中,例如。

public class CustomeEmailValidator  : AbstractValidator<string>
{
public CustomeEmailValidator (string fieldName)
{
RuleFor(m => m).NotEmpty().WithMessage(EmailEmptyMsg).WithName(fieldName);
RuleFor(m => m).EmailAddress().When(x => !string.IsNullOrEmpty(x)).WithMessage(EmailInvalidMsg).WithName(fieldName);
RuleFor(m => m).Must(x => x.Length <= 94).When(x => !string.IsNullOrEmpty(x)).WithMessage(EmailLengthMsg).WithName(fieldName);
}
}

然后在其他验证器中调用它,例如

public class LoginModelValidator : AbstractValidator<LoginModel>
{
public LoginModelValidator()
{
RuleFor(m => m.Password).NotEmpty().WithMessage(EmptyPasswordMsg);
RuleFor(m => m.Email).SetValidator(new MediGapEmailValidator("Email"));
}
}

问题是返回错误有一个错误 PropertyName of 'Email.Email' 或 EmailAddress.Email 我需要它只是 'Email' 或只是一个不带点的属性名称。

我在调用 setValidator 时尝试了 OverridePropertyName

RuleFor(m => m.Email).SetValidator(new MediGapEmailValidator("Email")).OverridePropertyName("Email");

但是好像不行。

有没有更好的方法来提取这个常见的验证码?

最佳答案

也许尝试另一种方法并使用扩展方法而不是自定义验证器。像这样:

public static class ValidationExtensions
{
public static void ValidateEmail<TV>(this AbstractValidator<TV> validator, Expression<Func<TV, string>> property)
{
validator.RuleFor(property).NotEmpty().WithMessage(EmailEmptyMsg);
// other rules go here...
}
}

然后您可以从任何验证器中调用它:

public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
this.ValidateEmail(x => x.PrimaryEmail);
this.ValidateEmail(x => x.SecondaryEmail);
}
}

关于c# - 如何摆脱流畅的 ValidationResult 的 PropertyName 中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13024866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com