C# fluent验证的电子邮件检查与服务器端不同
我使用FluentValidation来验证客户端和服务器端的模型。我使用的是最新版本的: FluentValidation.MVC5 在撰写本文时 5.5.0.0 我有以下简化的验证器:C# fluent验证的电子邮件检查与服务器端不同,c#,asp.net-mvc,fluentvalidation,C#,Asp.net Mvc,Fluentvalidation,我使用FluentValidation来验证客户端和服务器端的模型。我使用的是最新版本的: FluentValidation.MVC5 在撰写本文时 5.5.0.0 我有以下简化的验证器: public class MyViewModelValidator : AbstractValidator<MyViewModel> { public MyViewModelValidator() { RuleFor(x =&
public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
public MyViewModelValidator()
{
RuleFor(x => x.Email)
.EmailAddress().WithLocalizedMessage(() => MyResources.Validation_Email_NotValidAddress)
.NotEmpty()
.WithLocalizedMessage(() => MyResources.Validation_Email);
}
}
由于test@test
电子邮件地址并引发错误。因此,我的前端验证似乎比服务器端验证更松散
参考文档后,它确实声明客户端支持Email()
方法,但是在服务器端和前端呈现的内容之间似乎存在一些差异
如何确保客户端验证与服务器端的电子邮件验证一样彻底。客户端中定义的电子邮件输入规则(用数据val email属性修饰)(通过“email”字在页面上搜索,您可以找到RegExp) 服务器端中定义的电子邮件属性规则(也是RegExp) 就生命周期而言,这些项目没有什么共同点:在任何新版本中,内部regexp在这两个项目中可以同时变得更严格/更不严格,如果您的目标是在客户端和服务器上使用相同的规则并使其正常工作,而不管插件/库版本是否更新,那么我的建议是将当前的
EmailAddress()
规则替换为Match()
规则,并明确指定满足您的域模型需要的regexp
更新:
选择合适的regexp是另一个主题,正如Evgeny在上面提到的那样,这是一个被广泛描述的主题,我最终选择使用
匹配规则,因为这是客户端支持的验证程序之一
RuleFor(x => x.Email)
.Matches(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$").WithLocalizedMessage(() => MyResources.Validation_Email_NotValidAddress)
.NotEmpty() // <-- and cant be empty
.WithLocalizedMessage(() => MyResources.Validation_Email);
RuleFor(x=>x.Email)
.匹配(@“^\w+([-+.]\w+*@\w+([-.]\w+*\.\w+([-.]\w+*$))。带有本地化消息(()=>MyResources.Validation\u Email\u NotValidAddress)
.NotEmpty()//MyResources.Validation\u电子邮件);
我相信上面的正则表达式是ASP.NET用于RegularExpressionValidator
的。而且符合我的要求
RuleFor(x => x.Email)
.Matches(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$").WithLocalizedMessage(() => MyResources.Validation_Email_NotValidAddress)
.NotEmpty() // <-- and cant be empty
.WithLocalizedMessage(() => MyResources.Validation_Email);