1 回答
TA贡献1831条经验 获得超4个赞
IdentityResult包含一个Errors属性,它的类型是IEnumerable<IdentityError>。IdentityError本身包含一个Code属性和一个Description属性。这意味着result您的 OP 中的变量具有Errors描述发生的特定错误的属性。
IdentityErrorDescriber用于生成 的实例IdentityError。这是来自源的示例:
public virtual IdentityError DuplicateUserName(string userName)
{
return new IdentityError
{
Code = nameof(DuplicateUserName),
Description = Resources.FormatDuplicateUserName(userName)
};
}
IdentityErrorDescriber以同样的方式注入 DI 系统UserManager。这意味着您可以将它作为控制器_errorDescriber构造函数中的依赖项(例如)并在以后使用它,就像这样(假设已在您的构造函数中创建和设置):
if (!result.Succeeded)
{
// DuplicateUserName(...) requires the UserName itself so it can add it in the
// Description. We don't care about that so just provide null.
var duplicateUserNameCode = _errorDescriber.DuplicateUserName(null).Code;
// Here's another option that's less flexible but removes the need for _errorDescriber.
// var duplicateUserNameCode = nameof(IdentityErrorDescriber.DuplicateUserName);
if (result.Errors.Any(x => x.Code == duplicateUserNameCode))
{
// Your code for handling DuplicateUserName.
}
}
有许多不同的方法可以获取Code您想要测试的值并自行进行检查 - 这只是一个示例,它对于您可能想要对代码和错误本身进行的自定义是相当安全的。
如果您有兴趣,这里有一个指向DuplicateUserName错误添加到IdentityResult您返回的源的链接。
我只在DuplicateUserName这里讨论过,但还有其他IdentityErrorDescriber值,例如InvalidEmail您可能还想检查。
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报