我有一个问题,我在使用 microsoft.aspnet.identity 时无法使用电子邮件地址作为用户名(创建新项目时选择了个人用户帐户 - asp.net 5 的默认 mvc 项目模板)。我在很多地方都读到这是解决方案:
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
但是在新版本的asp.net身份中,UserManager似乎没有一个叫UserValidator的属性。“UserValidator”已被识别,但我想它现在以不同的方式添加到 UserManager 中。我在 UserManager 上看不到任何相关属性。
编辑:
“Identity”的 github 存储库中的单元测试对此案例进行了测试。它目前是此文件中的最后一个:
https://github.com/aspnet/Identity/blob/dev/test/Microsoft.AspNet.Identity.Test/UserValidatorTest.cs
我想这应该为答案提供一个线索,但我看不出这会在我的代码中出现在哪里。
[Theory]
[InlineData("test_email@foo.com", true)]
[InlineData("hao", true)]
[InlineData("test123", true)]
[InlineData("!noway", true)]
[InlineData("foo@boz#.com", true)]
public async Task CanAllowNonAlphaNumericUserName(string userName, bool expectSuccess)
{
// Setup
var manager = MockHelpers.TestUserManager(new NoopUserStore());
manager.Options.User.UserNameValidationRegex = null;
var validator = new UserValidator<TestUser>();
var user = new TestUser {UserName = userName};
// Act
var result = await validator.ValidateAsync(manager, user);
// Assert
if (expectSuccess)
{
IdentityResultAssert.IsSuccess(result);
}
else
{
IdentityResultAssert.IsFailure(result);
}
}