IUserStore
FindByNameAsync
メソッドをオーバーライドしたいです。方法は、UserManager
クラスのCreateAsync
メソッドで使用されます。私が得た私は、メソッドからIdentityUser
インスタンスを返す場合、それが正常に動作しますが、私はnull
を返した場合(例えば、そのユーザ名のユーザが存在しない):Asp .Net Identity - カスタムIUserStore FindByNameAsyncメソッド
{「メッセージ」:「エラーが発生しました。」、 "ExceptionMessage": "オブジェクト参照がオブジェクトのインスタンスに設定されていません。"、 "ExceptionType": "System.NullReferenceException"、 "StackTrace": "Microsoft.AspNet.Identity.UserValidator`2。ValidateUserName d__4.MoveNext()
これは私のオーバーライドメソッド
public Task<MyUser> FindByNameAsync(string userName)
{
return null;
}
です210
UserValidator
クラスのValidateUserName
メソッドで、以下のコードスニペットで失敗すると思います。
else
{
var owner = await Manager.FindByNameAsync(user.UserName).WithCurrentCulture();
if (owner != null && !EqualityComparer<TKey>.Default.Equals(owner.Id, user.Id))
{
errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.DuplicateName, user.UserName));
}
}
この例外を回避する方法は?FindByNameAsync
デフォルト実装では、Asp .Net Identity EntityFrameworkの実装が使用されました。 https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.EntityFramework/UserStore.csにあります。私の実装では、EFまたはLINQは使用しません。nullを返すだけです。 – Minja