Jah*_*han 17 c# identity roles owin asp.net-identity
我使用ASP.NET Identity 2来创建角色,但结果HttpContext.GetOwinContext().GetUserManager<AppRoleManager>()为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>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
AppRoleManager:
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()));
}
}
Run Code Online (Sandbox Code Playgroud)
tra*_*max 33
很可能你错过了给OwinContext创建ApplicationUserManager的方法.
为此,你需要在你的public void Configuration(IAppBuilder app)
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<AppRoleManager>(AppRoleManager.Create);
Run Code Online (Sandbox Code Playgroud)
这将注册创建UserManager和RoleManager使用的代理,OwinContext然后只能在控制器中调用它们.
| 归档时间: |
|
| 查看次数: |
21803 次 |
| 最近记录: |