我想重写IUserStore
FindByNameAsync
方法。方法用于类的CreateAsync
方法中UserManager
。如果我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,并且Task中的结果是您希望返回的具有null
值的内容。通过null
直接返回,调用者尝试展开任务的尝试(通过await
或Task.Result
)失败,从而生成NullReferenceException
。
public Task<MyUser> FindByNameAsync(string userName)
{
return Task.FromResult((MyUser)null);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句