web-dev-qa-db-ja.com

ASP.NETIdentityのエラーメッセージを変更する方法

一つ質問があります。 Identity ASP .NETでエラーメッセージを変更しようとしていますが、その方法がわかりません。エラーメッセージを変更したい-「ログインはすでに完了しています」。CreateAsyncメソッドはこのエラーメッセージを返します。 。 私を助けてください。

13
user3160020

_Microsoft.AspNet.Identity.UserManager<TUser>_クラスには、タイプ_IIdentityValidator<TUser>_のUserValidatorというパブリックプロパティがあります。 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クラスは、3つの基本的な検証を実行して、独自の検証を行う場合に留意します。

  1. UserNameがnullまたは空白ではありません
  2. UserNameは英数字です
  3. UserNameは重複していません
13
Josh Rack
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);
        }
    }
}
7
Grant Li