asp.Net   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何自定义Asp.net Identity 2用户名已经采取验证消息?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何自定义Asp.net Identity 2用户名已经采取验证消息(名称XYZ已被占用)?谢谢
@H_801_3@解决方法
那么我没有找到任何简单的解决方案来解决这个问题。简而言之,我的意思是在属性/模型/控制器中修改一些消息。

一个可能的解决办法可能是:

执行后

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,请注明来意。