您可以提供自己的 IIdentityValidator<TUser> 实现,这只是一个带签名的方法: Task<IdentityResult> ValidateAsync(TUser item) . 您'd have to implement your own validations, but you' d可以控制出来的消息 . 就像是:
public class UserValidator : IIdentityValidator<ApplicationUser>
{
public async Task<IdentityResult> ValidateAsync(ApplicationUser item)
{
if (string.IsNullOrWhiteSpace(item.UserName))
{
return IdentityResult.Failed("Really?!");
}
return IdentityResult.Success;
}
}
默认的UserValidator类执行三个基本验证,如果您自己滚动,请记住:
UserName不为null或空格
UserName是字母数字
UserName不重复
6
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
if (error.StartsWith("Name"))
{
var NameToEmail= Regex.Replace(error,"Name","Email");
ModelState.AddModelError("", NameToEmail);
}
else
{
ModelState.AddModelError("", error);
}
}
}
2 回答
Microsoft.AspNet.Identity.UserManager<TUser>
类有一个名为UserValidator
的属性为IIdentityValidator<TUser>
的公共属性 . UserManager的构造函数将该属性设置为Microsoft.AspNet.Identity.UserValidator<TUser>
的实例 . 您在调用CreateAsync时看到的错误消息来自Microsoft.AspNet.Identity.dll中嵌入的资源,并从UserValidator内部添加到IdentityResult .您可以提供自己的
IIdentityValidator<TUser>
实现,这只是一个带签名的方法:Task<IdentityResult> ValidateAsync(TUser item)
. 您'd have to implement your own validations, but you' d可以控制出来的消息 . 就像是:默认的UserValidator类执行三个基本验证,如果您自己滚动,请记住:
UserName不为null或空格
UserName是字母数字
UserName不重复