2016-05-16 12 views
6

Bir hesabı Web API üzerinden "[email protected]" gibi bir e-posta ile kaydederken, Fiddler aşağıdaki hatayı döndürür. E-postanın kullanıcı adı için de kullanıldığını unutmayın, bu nedenle her iki alan da ile aynıdır. Ama MVC'nin kendisinde kayıt yaparken çalışır.ASP.NET MVC Kimlik E-postası/Kullanıcı Adı Özel Karakterlerle

ExceptionMessage = Kullanıcı Oluşturma Başarısız - Kimlik İstisnası. Hatalar:

Kullanıcı adı [email protected] geçersiz, sadece harf veya rakam içerebilir.

Kullanıcı Nesnesi

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 

     }; 

Ben AllowOnlyAlphanumericUserNames dışında yorum çalıştı ama işe yaramadı. Doğru olarak yanlış ayarlanarak özel karakterlere izin verilmeli, benim durumumda tire (-).

API Kontrolör

// 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) { 
     ... 

Çözüm

IdentityConfig.cs NO değişiklikler vardır. Yalnızca benim API denetleyicim değişiklikler.

// 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); 

cevap

10

Sen ApplicationUserManager arasında Create yönteminde AllowOnlyAlphanumericUserNames = false ayarlıyorsunuz. ApiControllerPostRegister eyleminin içinde ApplicationUserManager bir örneğini yeniliyorsunuz. AllowOnlyAlphanumericUserNames, varsayılan olarak doğrudur.

Sen ApplicationUserManger bir örneğini yeni zaman AllowOnlyAlphanumericUserNames false olarak ayarlanır ApplicationUserManager

public ApplicationUserManager(IUserStore<ApplicationUser> store): base(store) 
{ 
     UserValidator = new UserValidator<ApplicationUser>(this) 
     { 
      AllowOnlyAlphanumericUserNames = false, 
      RequireUniqueEmail = true 
     }; 
} 

Bu yol Oluşturucu değiştirebilir.

Not: Onun iyi ApplicationUserManagerOwinContext aynı varsayılan MVC5 şablonunun AccountController yapılan veya kullandıkça Bağımlılık enjeksiyon alır.

+0

Çözümünüz için teşekkürler! Notunda ne önerdiğini takip ettim. Sorumu çalışma çözümünü yansıtmak için düzenledim. :) –

3

Bunun nedeni, tüm yapılandırmanızın Web Api eyleminizde kullanmadığınız ApplicationUserManager içeride olmasıdır. Bunun yerine, UserManager no'lu yeni sürümleri kullanıma sunacaksınız. Böylece, tüm doğrulama ve varsayılanlar için varsayılan değerleri kullanacaksınız.