大佬教程收集整理的这篇文章主要介绍了如何自定义Asp.net Identity 2用户名已经采取验证消息?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个可能的解决办法可能是:
执行后
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 Identity 2用户名已经采取验证消息?全部内容,希望文章能够帮你解决如何自定义Asp.net Identity 2用户名已经采取验证消息?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。