如何使用 FluentValidation 同时为多个字段创建规则
How to create a rule for several fields at the same time using FluentValidation
我需要验证 Asp.net MVC 项目中的以下情况:如果字段 ServicoEmail、ServicoWebsite、ServicoBlog、ServicoRedeSocial 和 ServicoMensagemInstantanea 都是假的,return 一条错误消息。我尝试按以下方式进行操作,但它不起作用...有人知道如何帮助我吗?
RuleFor(ps => new { ps.ServicoEmail, ps.ServicoWebsite, ps.ServicoBlog, ps.ServicoRedeSocial, ps.ServicoMensagemInstantanea })
.Must(ps=> ps.ServicoEmail == false && ps.ServicoWebsite == false && ps.ServicoBlog == false && ps.ServicoRedeSocial == false && ps.ServicoMensagemInstantanea == false)
.WithMessage("É necessário selecionar pelo menos um Tipo de Serviço.");
我的Class:
public abstract class ServicoWebCommand : Command
{
public int Id { get; protected set; }
public string Descricao { get; protected set; }
public string FormatoCampo { get; protected set; }
public bool ServicoEmail { get; protected set; }
public bool ServicoWebsite { get; protected set; }
public bool ServicoBlog { get; protected set; }
public bool ServicoRedeSocial { get; protected set; }
public bool ServicoMensagemInstantanea { get; protected set; }
public bool PadraoSistema { get; protected set; }
}
您需要单独指定它们中的每一个,或者您可以指定自定义验证器。
方式一:
RuleFor(ps => ps).SetValidator(new ServicoValidator());
然后编写Validator实现:
public class ServicoValidator: AbstractValidator<ServicoWebCommand>
{
public ServicoValidator()
{
RuleFor(t => t).Custom(ValidateServico);
}
private void ValidateServico(ServicoWebCommand ps, CustomContext validationContext)
{
if(ps.ServicoEmail == false &&
ps.ServicoWebsite == false &&
ps.ServicoBlog == false &&
ps.ServicoRedeSocial == false &&
ps.ServicoMensagemInstantanea == false)
{
validationContext.AddFailure("É necessário selecionar pelo menos um Tipo de Serviço.");
}
}
}
方式二:
RuleFor(ps => ps).Must(ps => Validate(ps));
并编写验证方法,如:
private bool Validate(ServicoWebCommand ps)
{
if(ps.ServicoEmail == false &&
ps.ServicoWebsite == false &&
ps.ServicoBlog == false &&
ps.ServicoRedeSocial == false &&
ps.ServicoMensagemInstantanea == false)
return false;
return true;
}
我需要验证 Asp.net MVC 项目中的以下情况:如果字段 ServicoEmail、ServicoWebsite、ServicoBlog、ServicoRedeSocial 和 ServicoMensagemInstantanea 都是假的,return 一条错误消息。我尝试按以下方式进行操作,但它不起作用...有人知道如何帮助我吗?
RuleFor(ps => new { ps.ServicoEmail, ps.ServicoWebsite, ps.ServicoBlog, ps.ServicoRedeSocial, ps.ServicoMensagemInstantanea })
.Must(ps=> ps.ServicoEmail == false && ps.ServicoWebsite == false && ps.ServicoBlog == false && ps.ServicoRedeSocial == false && ps.ServicoMensagemInstantanea == false)
.WithMessage("É necessário selecionar pelo menos um Tipo de Serviço.");
我的Class:
public abstract class ServicoWebCommand : Command
{
public int Id { get; protected set; }
public string Descricao { get; protected set; }
public string FormatoCampo { get; protected set; }
public bool ServicoEmail { get; protected set; }
public bool ServicoWebsite { get; protected set; }
public bool ServicoBlog { get; protected set; }
public bool ServicoRedeSocial { get; protected set; }
public bool ServicoMensagemInstantanea { get; protected set; }
public bool PadraoSistema { get; protected set; }
}
您需要单独指定它们中的每一个,或者您可以指定自定义验证器。
方式一:
RuleFor(ps => ps).SetValidator(new ServicoValidator());
然后编写Validator实现:
public class ServicoValidator: AbstractValidator<ServicoWebCommand>
{
public ServicoValidator()
{
RuleFor(t => t).Custom(ValidateServico);
}
private void ValidateServico(ServicoWebCommand ps, CustomContext validationContext)
{
if(ps.ServicoEmail == false &&
ps.ServicoWebsite == false &&
ps.ServicoBlog == false &&
ps.ServicoRedeSocial == false &&
ps.ServicoMensagemInstantanea == false)
{
validationContext.AddFailure("É necessário selecionar pelo menos um Tipo de Serviço.");
}
}
}
方式二:
RuleFor(ps => ps).Must(ps => Validate(ps));
并编写验证方法,如:
private bool Validate(ServicoWebCommand ps)
{
if(ps.ServicoEmail == false &&
ps.ServicoWebsite == false &&
ps.ServicoBlog == false &&
ps.ServicoRedeSocial == false &&
ps.ServicoMensagemInstantanea == false)
return false;
return true;
}