【发布时间】:2019-02-07 10:25:26
【问题描述】:
我正在使用 WebApi 项目并使用流利的验证来验证请求。
用户群 Dto。
public class UserBaseDto
{
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("countryId")]
public int CountryId { get; set; }
[JsonProperty("phoneNumber")]
public string PhoneNumber { get; set; }
}
UserRegister Dto.
public class RegisterDto : UserBaseDto
{
}
UserBaseDtoValidator.
public class UserBaseDtoValidator : AbstractValidator<UserBaseDto>
{
public UserBaseDtoValidator()
{
RuleFor(x => x.Email)
.EmailAddress()
.WithMessage("Please provide valid email");
RuleFor(x => x.PhoneNumber)
.MatchPhoneNumberRule()
.WithMessage("Please provide valid phone number");
}
}
MatchPhoneNumberRule 是一个自定义验证器
public static class CustomValidators
{
public static IRuleBuilderOptions<T, string> MatchPhoneNumberRule<T>(this IRuleBuilder<T, string> ruleBuilder)
{
return ruleBuilder.SetValidator(new RegularExpressionValidator(@"((?:[0-9]\-?){6,14}[0-9]$)|((?:[0-9]\x20?){6,14}[0-9]$)"));
}
}
Regex 接受 6 到 14 位电话号码。
在这里,我想检查注册请求的验证。所以,我做了类似的事情:
public class RegisterDtoValidator : AbstractValidator<RegisterDto>
{
public RegisterDtoValidator()
{
RuleFor(x => x).SetValidator(new UserBaseDtoValidator());
}
}
所有其他验证工作正常。但是,正则表达式适用于下限,但是当我通过超过 14 位时,验证不会被触发。
使用RegularExpressionAttribute 的相同表达式
【问题讨论】:
标签: c# regex asp.net-core asp.net-core-webapi fluentvalidation