私は流暢な検証を使用しており、メールアドレスの一般的な検証ルールをカスタムメールバリデーターに抽出しました。
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"));
}
}
問題は、戻りエラーに「Email.Email」または「EmailAddress.Email」のエラー PropertyName があることです。「Email」またはドットなしの単一のプロパティ名である必要があります。
setValidator を呼び出すときに OverridePropertyName を試しました
RuleFor(m => m.Email).SetValidator(new MediGapEmailValidator("Email")).OverridePropertyName("Email");
しかし、うまくいかないようです。
この一般的な検証コードを除外するより良い方法はありますか?