2014-10-13 1 views
13

역할을 만들기 위해 ASP.NET ID 2를 사용했지만 HttpContext.GetOwinContext().GetUserManager<AppRoleManager>()의 결과가 null입니다.HttpContext.GetOwinContext(). GetUserManager <AppRoleManager>() return null

그런 다음 역할을 만들 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까?

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>(); 
     } 
    } 
} 

내 컨트롤러 :

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 : 당신이 ApplicationUserManager을 만들 수있는 방법을 OwinContext 제공 놓친 대부분의 경우

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()를 시도하십시오. Get (); ' – trailmax

+2

@trailmax : null을 반환합니다. – Jahan

+0

Get과 GetUserManager의 차이점은 무엇입니까? – mjohnsonengr

답변

26

. 당신이 OwinContextUserManagerRoleManager를 작성하고 해당 후에는 컨트롤러에서이 다시 전화 할 수 public void Configuration(IAppBuilder app)

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

이 등록됩니다 대리자이되어 있어야합니다이 들어
.

+0

첫 줄이 이미 추가되었지만 코드 두 번째 줄을 추가하면 오류가 발생합니다. 컴파일러 오류 메시지 : CS1928 : 'Owin.IAppBuilder'에 'CreatePerOwinContext'에 대한 정의가없고 가장 좋은 확장 메서드 오버로드 'Owin.AppBuilderExtensions.CreatePerOwinContext (Owin.IAppBuilder, System.Func )'에 잘못된 응답이 있습니다. – Jahan

+1

@Jahan appologies가 내 대답을 수정 했으므로 두 번째 줄의 일반 매개 변수로 AppRoleManager를 사용해야합니다. – trailmax

+2

답변 해 주셔서 감사합니다. – Jahan