如何更改ASP.NET标识中的错误消息

时间:2014-01-04 10:41:41

标签: asp.net identity asp.net-identity

我有一个问题。 我在Identity ASP .NET中尝试更改错误消息,我不知道它是怎么做的。 我想要更改错误消息 - “已经登录”。 CreateAsync方法返回此错误消息。 请帮帮我。

2 个答案:

答案 0 :(得分:13)

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)。您必须实现自己的验证,但是您可以控制出来的消息。类似的东西:

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类执行三个基本验证,如果您自己滚动,请记住:

  1. UserName不为null或空格
  2. UserName是字母数字
  3. UserName不重复

答案 1 :(得分: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);
        }
    }
}