Min*_*nja 6 c# asp.net asp.net-web-api asp.net-identity
我想覆盖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;
}
Run Code Online (Sandbox Code Playgroud)
我认为它在下面的代码片段中的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));
}
}
Run Code Online (Sandbox Code Playgroud)
从FindByNameAsync方法返回什么以避免此异常?
您还必须在代码中返回任务,请参阅下面的更改.这是因为调用者期望一个Task,并且Task中的结果是您想要返回的null值.通过null直接返回调用者尝试解包任务(通过await或Task.Result)失败生成NullReferenceException.
public Task<MyUser> FindByNameAsync(string userName)
{
return Task.FromResult((MyUser)null);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |