Asp.net 流畅验证-自定义Guid验证程序未触发
我有一个自定义的FluntValidation验证规则,用于检查Guid是否有效Asp.net 流畅验证-自定义Guid验证程序未触发,asp.net,asp.net-core,fluentvalidation,Asp.net,Asp.net Core,Fluentvalidation,我有一个自定义的FluntValidation验证规则,用于检查Guid是否有效 public static class GuidValidator { private static Regex isGuid = new Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
public static class GuidValidator
{
private static Regex isGuid = new Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
public static bool IsGuid(string candidate)
{
if (candidate != null)
{
if (isGuid.IsMatch(candidate))
{
return true;
}
}
return false;
}
}
我想用它来检查Guid属性的有效Guid,然后返回自定义错误消息
RuleFor(x => x.ShiftId).Must(guid => GuidValidator.IsGuid(guid.ToString())).WithMessage("StopShift.ShiftId.GuidNotValid()");
但是,我的规则没有被命中,因为我猜Guid是无效的,并且一些内置的检查在它之前运行。如何禁用内置检查以达到自定义规则?这取决于堆栈的外观。
Guid
不会用“无效”值实例化
如果您想要满足一个用例,其中所讨论的值可以是有效的或无效的Guid
,我建议您将其建模为字符串
e、 g
[Validator(typeof(FooRequestValidator))]
公共类请求
{
公共字符串条{get;set;}
}
公共类FooRequestValidator:AbstractValidator
{
公共FooRequestValidator()
{
规则(x=>x.Bar)
.Must(ValidateBar).WithErrorCode(“非guid”);
}
专用布尔ValidateBar(字符串栏)
{
返回Guid.TryParse(条形图,输出变量结果);
}
}
这取决于堆栈的外观。Guid
不会用“无效”值实例化
如果您想要满足一个用例,其中所讨论的值可以是有效的或无效的Guid
,我建议您将其建模为字符串
e、 g
[Validator(typeof(FooRequestValidator))]
公共类请求
{
公共字符串条{get;set;}
}
公共类FooRequestValidator:AbstractValidator
{
公共FooRequestValidator()
{
规则(x=>x.Bar)
.Must(ValidateBar).WithErrorCode(“非guid”);
}
专用布尔ValidateBar(字符串栏)
{
返回Guid.TryParse(条形图,输出变量结果);
}
}
类中的属性是不可为空的Guid
public Guid ProductId {get;set;}
这是我用的
RuleFor(product => product.ProductId).Must(BeAValidGuid).When(product => product.ProductId != null);
按照惯例
private bool BeAValidGuid(Guid unValidatedGuid)
{
try
{
if(unValidatedGuid != Guid.Empty && unValidatedGuid != null )
{
if (Guid.TryParse(unValidatedGuid.ToString(), out Guid validatedGuid))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
catch (Exception)
{
throw;
}
}
类中的属性是不可为空的Guid
public Guid ProductId {get;set;}
这是我用的
RuleFor(product => product.ProductId).Must(BeAValidGuid).When(product => product.ProductId != null);
按照惯例
private bool BeAValidGuid(Guid unValidatedGuid)
{
try
{
if(unValidatedGuid != Guid.Empty && unValidatedGuid != null )
{
if (Guid.TryParse(unValidatedGuid.ToString(), out Guid validatedGuid))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
catch (Exception)
{
throw;
}
}