У меня есть один вопрос. Я пытаюсь изменить сообщение об ошибке в Identity ASP.NET, и я не знаю, как это сделать. Я хочу изменить сообщение об ошибке - "Вход уже сделан". Метод CreateAsync возвращает это сообщение об ошибке. Пожалуйста, помогите мне.
Как изменить сообщение об ошибке в ASP.NET Identity
Ответ 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);
}
}
}