对于身份,我在项目中使用 AspNetCore.Identity 包。
我将自定义注册端点。请求正文应为电话号码和密码。
在这种情况下,它可能会返回一些与电话号码相关的错误消息。
例如,电话号码 xxx 无效、电话号码 xxx 重复、...
所以我将通过自定义 IdentityErrorDescriber 添加一些错误描述器。
public class AuthErrorDescriber : IdentityErrorDescriber
{
/// <summary>
/// Returns an <see cref="IdentityError"/> indicating the specified <paramref name="phoneNumber"/> is invalid.
/// </summary>
/// <param name="phoneNumber">The phoneNumber that is invalid.</param>
/// <returns>An <see cref="IdentityError"/> indicating the specified <paramref name="phoneNumber"/> is invalid.</returns>
public virtual IdentityError InvalidPhoneNumber(string? phoneNumber)
{
return new IdentityError
{
Code = nameof(InvalidPhoneNumber),
// Here, I cannot customize or use `Resources`
// for example `Resources.PasswordMismatch`
Description = $"PhoneNumber '{phoneNumber}' is invalid."
};
}
}
我添加了这样的错误描述。
services.AddIdentity<User, Role>()
.AddErrorDescriber<AuthErrorDescriber>();
但是我不能在我的代码中使用这个新方法
if (string.IsNullOrEmpty(phoneNumber) || !PhoneNumberHelper.IsValid(phoneNumber))
{
return CreateValidationProblem(IdentityResult.Failed(userManager.ErrorDescriber.InvalidPhoneNumber(phoneNumber)));
}
这是错误消息。
CS1061: 'IdentityErrorDescriber' does not contain a definition for 'InvalidPhoneNumber' and no accessible extension method 'InvalidPhoneNumber' accepting a first argument of type 'IdentityErrorDescriber' could be found (are you missing a using directive or an assembly reference?)
如何解决以上问题?
还有其他方法可以在那里添加新方法吗?
显示此错误的原因很明显,您创建的自定义 AuthErrorDescriber 已在身份服务中正确注册,但是当您尝试使用 userManager.ErrorDescriber 访问自定义方法 (InvalidPhoneNumber) 时,它会被视为基本 IdentityErrorDescriber 类型您派生的 AuthErrorDescriber 类型。
要解决此错误,我建议您可以尝试以下代码:
var errorDescriber = userManager.ErrorDescriber as AuthErrorDescriber;
if (errorDescriber!=null)
{
var result = IdentityResult.Failed(errorDescriber.InvalidPhoneNumber("phoneNumber"));
}
结果: