当使用电子邮件“xxx-yyy@gmail.com”通过Web API注册帐户时,Fiddler返回以下错误。请注意,电子邮件也用于用户名,因此两个字段相同。但在MVC本身上注册时可以正常工作。
引用: 异常消息=用户创建失败-标识异常。错误如下: 用户名xx-yyy@gmail.com无效,只能包含字母或数字。
用户对象
我尝试注释掉AllowOnlyAlphanumericUserNames,但没有生效。正确的设置应该是将其设置为false,这样就可以允许特殊字符,比如我的情况是一个连字符(-)。 API控制器
引用: 异常消息=用户创建失败-标识异常。错误如下: 用户名xx-yyy@gmail.com无效,只能包含字母或数字。
用户对象
var newUser = new ApplicationUser {
UserName = user.Email,
Email = user.Email
};
IdentifyConfig.cs
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) {
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser>(manager) {
RequireUniqueEmail = true,
AllowOnlyAlphanumericUserNames = false
};
我尝试注释掉AllowOnlyAlphanumericUserNames,但没有生效。正确的设置应该是将其设置为false,这样就可以允许特殊字符,比如我的情况是一个连字符(-)。 API控制器
// POST: api/auth/register
[ActionName("Register")]
public async Task<HttpResponseMessage> PostRegister(Auth user) {
//dash issue is here.
var userContext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userContext);
var userManager = new UserManager<ApplicationUser>(userStore);
var newUser = new ApplicationUser {
UserName = user.Email,
Email = user.Email
};
var result = await userManager.CreateAsync(newUser, user.PasswordHash);
if (result.Succeeded) {
...
解决方案
IdentityConfig.cs没有任何更改。所有的更改都只发生在我的API控制器中。
// POST: api/auth/register
[ActionName("Register")]
public async Task<HttpResponseMessage> PostRegister(Auth user) {
//Changed to the following line
ApplicationUserManager userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var newUser = new ApplicationUser {
UserName = user.Email,
Email = user.Email
};
var result = await userManager.CreateAsync(newUser, user.PasswordHash);