【发布时间】:2016-11-18 22:46:32
【问题描述】:
我想覆盖 IUserStore FindByNameAsync 方法。方法用于UserManager 类的CreateAsync 方法。如果我从该方法返回 IdentityUser 实例,它工作正常,但如果我返回 null(例如,没有具有该用户名的用户)我得到:
{"Message":"发生错误。","ExceptionMessage":"对象引用未设置为对象的实例。","ExceptionType":"System.NullReferenceException","StackTrace":" at Microsoft.AspNet.Identity.UserValidator`2.ValidateUserName d__4.MoveNext()
这是我的覆盖方法
public Task<MyUser> FindByNameAsync(string userName)
{
return null;
}
我认为它在 UserValidator 类中失败 - 下面代码 sn-p 中的 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 实现。可以在这里找到aspnetidentity.codeplex.com/SourceControl/latest#src/…。在我的实现中,我不使用 EF 或 LINQ,我只返回 null。
标签: c# asp.net asp.net-web-api asp.net-identity