Как изменить сообщение об ошибке в ASP.NET Identity

У меня есть один вопрос. Я пытаюсь изменить сообщение об ошибке в Identity ASP.NET, и я не знаю, как это сделать. Я хочу изменить сообщение об ошибке - "Вход уже сделан". Метод CreateAsync возвращает это сообщение об ошибке. Пожалуйста, помогите мне.

Ответ 1

Класс Microsoft.AspNet.Identity.UserManager<TUser> имеет общедоступное свойство UserValidator типа IIdentityValidator<TUser>. Конструктор для UserManager устанавливает это свойство в экземпляр Microsoft.AspNet.Identity.UserValidator<TUser>. Сообщения об ошибках, которые вы видите при вызове CreateAsync, поступают из ресурсов, встроенных в файл Microsoft.AspNet.Identity.dll, и добавляются в IdentityResult изнутри UserValidator.

Вы можете предоставить свою собственную реализацию 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 по умолчанию выполняет три основные проверки, которые следует учитывать, если вы откатываете свои собственные:

  • Имя пользователя не равно null или пробелу.
  • Имя пользователя - буквенно-цифровое
  • Имя пользователя не является дубликатом

Ответ 2

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);
        }
    }
}