2014-10-13 24 views
13

Rol oluşturmak için ASP.NET Identity 2 kullanıyorum ama HttpContext.GetOwinContext().GetUserManager<AppRoleManager>() sonucu null. Daha sonra bu rolü oluşturamadım.HttpContext.GetOwinContext() GetUserManager <AppRoleManager>() dönüş null

Bu sorunu nasıl çözebilirim?

public class MVCController : Controller 
{ 
    public MVCController() 
    { 

    } 
    public AppRoleManager RoleManager // returns null ?! 
    { 
     get 
     { 
      return HttpContext.GetOwinContext().GetUserManager<AppRoleManager>(); 
     } 
    } 
    public User CurrentUser 
    { 
     get 
     { 
      string currentUserId = User.Identity.GetUserId(); 
      User currentUser = DataContextFactory.GetDataContext().Users.FirstOrDefault(x => x.Id.ToString() == currentUserId); 
      return currentUser; 
     } 
    } 
    public IAuthenticationManager AuthManager 
    { 
     get 
     { 

      return HttpContext.GetOwinContext().Authentication; 
     } 
    } 
    public AppUserManager UserManager 
    { 
     get 
     { 
      return HttpContext.GetOwinContext().GetUserManager<AppUserManager>(); 
     } 
    } 
} 

My Denetleyici:

public class RoleAdminController : MVCController 
{ 
    [HttpPost] 
    public async Task<ActionResult> CreateRole([Required]string name) 
    { 
     if (ModelState.IsValid) 
     { 
      if (RoleManager != null) // RoleManager is null, why?! 
      { 
       IdentityResult result = await RoleManager.CreateAsync(new Role { Name = name }); 
       if (result.Succeeded) 
       { 
        return RedirectToAction("Index"); 
       } 
       else 
       { 
        AddErrorsFromResult(result); 
       } 
      } 
     } 
     return View(name); 
    } 
} 

AppRoleManager: Eğer ApplicationUserManager oluşturmak için bir yol OwinContext vererek kaçırdılar Büyük olasılıkla

public class AppRoleManager : RoleManager<Role, int>, IDisposable 
{ 
    public AppRoleManager(RoleStore<Role, int, UserRole> store) 
     : base(store) 
    { 
    } 
    public static AppRoleManager Create(IdentityFactoryOptions<AppRoleManager> options, IOwinContext context) 
    { 
     return new AppRoleManager(new RoleStore<Role, int, UserRole>(DataContextFactory.GetDataContext())); 
    } 
} 
+1

'HttpContext.GetOwinContext() öğesini deneyin. (); ' – trailmax

+2

@trailmax: null döndürür. – Jahan

+0

Get ve GetUserManager arasındaki fark nedir? – mjohnsonengr

cevap

26

. Eğer OwinContext ile UserManager ve RoleManager oluşturmak ve ancak bundan sonra size denetleyicileri bu geri arayabilir public void Configuration(IAppBuilder app)

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
app.CreatePerOwinContext<AppRoleManager>(AppRoleManager.Create); 

Bu kaydedecektir delegelerin bu olması gerekir Bunun için
.

+0

İlk satır zaten eklendi ama kodunuzun ikinci satırını eklediğimde bir hata aldım .... Derleyici Hata İletisi: CS1928: 'Owin.IAppBuilder', 'CreatePerOwinContext' ve 'CreatePerOwinContext' için bir tanım içermiyor. En iyi uzatma yöntemi aşırı yükü 'Owin.AppBuilderExtensions.CreatePerOwinContext (Owin.IAppBuilder, System.Func )' geçersiz argümanlar var – Jahan

+1

@Jahan appologies, benim yanıt düzeltildi, ikinci satırda genel bir parametre olarak 'AppRoleManager' olmalıdır. – trailmax

+2

Cevabınız için teşekkür ederiz. – Jahan

İlgili konular