![](/img/trans.png)
[英]Mocking IUserStore against asp.net identity inside asp.net mvc5
[英]Asp .Net Identity - Custom IUserStore FindByNameAsync method
我想覆盖IUserStore
FindByNameAsync
方法。 方法用于UserManager
类的CreateAsync
方法。 如果我从方法返回IdentityUser
实例,它工作正常,但如果我返回null
(例如,没有用户使用该用户名),我得到:
{“Message”:“发生错误。”,“ExceptionMessage”:“对象引用未设置为对象的实例。”,“ExceptionType”:“System.NullReferenceException”,“StackTrace”:“在Microsoft.AspNet .Identity.UserValidator`2.ValidateUserName d__4.MoveNext()
这是我的覆盖方法
public Task<MyUser> FindByNameAsync(string userName)
{
return null;
}
我认为它在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
方法返回什么以避免此异常?
您还必须在代码中返回任务,请参阅下面的更改。 这是因为调用者需要一个Task,并且Task中的结果是您想要返回的null
值。 通过直接返回null
,调用者尝试解包任务(通过await
或Task.Result
)失败,从而生成NullReferenceException
。
public Task<MyUser> FindByNameAsync(string userName)
{
return Task.FromResult((MyUser)null);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.