如何自定义Asp.net Identity 2用户名已经采取验证消息?
发布时间:2020-12-16 00:32:40 所属栏目:asp.Net 来源:网络整理
导读:我如何自定义Asp.net Identity 2用户名已经采取验证消息(名称XYZ已被占用)?谢谢 解决方法 那么我没有找到任何简单的解决方案来解决这个问题。简而言之,我的意思是在属性/模型/控制器中修改一些消息。 一个可能的解决办法可能是: 执行后 var result = awai
我如何自定义Asp.net Identity 2用户名已经采取验证消息(名称XYZ已被占用)?谢谢
解决方法
那么我没有找到任何简单的解决方案来解决这个问题。简而言之,我的意思是在属性/模型/控制器中修改一些消息。
一个可能的解决办法可能是: 执行后 var result = await UserManager.CreateAsync(user,model.Password); 如果结果不成功,您可以检查它的“错误属性”,“名称XYZ已被占用”。模式,并用您的自定义消息替换它。 另一个解决方案(这是我的首选方法)是编写一个自定义UserValidation类: /// <summary> /// Validates users before they are saved to an IUserStore /// </summary> /// <typeparam name="TUser"></typeparam> public class CustomUserValidator<TUser> : UserValidator<TUser,string> where TUser : ApplicationUser { /// <summary> /// Constructor /// </summary> /// <param name="manager"></param> public CustomUserValidator(UserManager<TUser,string> manager) : base(manager) { this.Manager = manager; } private UserManager<TUser,string> Manager { get; set; } /// <summary> /// Validates a user before saving /// </summary> /// <param name="item"></param> /// <returns></returns> public override async Task<IdentityResult> ValidateAsync(TUser item) { if (item == null) { throw new ArgumentNullException("item"); } var errors = new List<string>(); await ValidateUserName(item,errors); if (RequireUniqueEmail) { await ValidateEmail(item,errors); } if (errors.Count > 0) { return IdentityResult.Failed(errors.ToArray()); } return IdentityResult.Success; } private async Task ValidateUserName(TUser user,List<string> errors) { if (string.IsNullOrWhiteSpace(user.UserName)) { errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.PropertyTooShort,"Name")); } else if (AllowOnlyAlphanumericUserNames && !Regex.IsMatch(user.UserName,@"^[A-Za-z0-9@_.]+$")) { // If any characters are not letters or digits,its an illegal user name errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.InvalidUserName,user.UserName)); } else { var owner = await Manager.FindByNameAsync(user.UserName); if (owner != null && !EqualityComparer<string>.Default.Equals(owner.Id,user.Id)) { errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.DuplicateName,user.UserName)); } } } // make sure email is not empty,valid,and unique private async Task ValidateEmail(TUser user,List<string> errors) { if (!user.Email.IsNullOrWhiteSpace()) { if (string.IsNullOrWhiteSpace(user.Email)) { errors.Add(String.Format(CultureInfo.CurrentCulture,"Email")); return; } try { var m = new MailAddress(user.Email); } catch (FormatException) { errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.InvalidEmail,email)); return; } } var owner = await Manager.FindByEmailAsync(user.Email); if (owner != null && !EqualityComparer<string>.Default.Equals(owner.Id,user.Id)) { errors.Add(String.Format(CultureInfo.CurrentCulture,Resources.DuplicateEmail,email)); } } } 您可以看到对于正在使用的所有验证错误消息资源,所以通过在资源中指定自定义格式,您将能够自定义这些消息。 您可以在ApplicationUserManager类中注册验证器,创建方法: public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options,IOwinContext context) { manager.UserValidator = new CustomUserValidator<ApplicationUser>(manager) { AllowOnlyAlphanumericUserNames = false,RequireUniqueEmail = true }; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 按钮属性: – commandName和CommandArguments
- asp-classic – 经典的ASP gremlims,每当使用HTML特殊字符时
- asp.net-mvc – Elmah.MVC对Elmah.contrib.Mvc
- asp.net – 如何使用iTextSharp打印网格视图
- asp.net – 使用ItemDataBound我只获得每隔一行.为什么?
- asp.net – web.config角色和用户名是否允许空格?
- 如何使用ASP.Net集群上传文件夹?
- ASP.NET UserControl类库
- asp.net-core-1.0 – Asp.Net Core 1.0 RTM中CreateIdentit
- 在ASP.net中创建一个弹出窗口以获取用户输入
推荐文章
站长推荐
- ASP.NET Core 菜鸟之路:从Startup.cs说起
- asp.net-identity – 如何本地化ASP.NET身份用户
- 一步一步创建ASP.NET MVC5程序[Repository+Autof
- asp.net-mvc-4 – ASP.NET 4.5和Web API中的URL重
- asp.net-mvc – 不显眼的验证不适用于Ajax.Begin
- Exceptionless - .Net Core开源日志框架
- asp.net-mvc-3 – 在mvc 3中上传成功的图像,但编
- ASP.NET MVC中的完全自定义身份验证:丢失HttpCo
- asp.net – 寻找RESTful API的身份验证/模拟策略
- ASP.NET OAuth授权 – 使用ClientId和Secret以及
热点阅读