C# MVC4.Net 4.5用户角色问题

C# MVC4.Net 4.5用户角色问题,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我正在将我的应用程序从mvc4 asp.net4更新到.net4.5,用户角色不起作用 目前我正在使用这个代码 protected void Application_AuthenticateRequest(Object sender, EventArgs e) { HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (authCoo

我正在将我的应用程序从mvc4 asp.net4更新到.net4.5,用户角色不起作用

目前我正在使用这个代码

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            string[] roles = authTicket.UserData.Split(new Char[] { ',' });
            GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(authTicket.Name), roles);
            Context.User = userPrincipal;
 //Or
//HttpContext.Current.User = userPrincipal;
        }
    }
在上面的帮助下,我可以向当前用户添加角色,并在控制器中检查用户角色 [Authorize(Roles=“Admin,Guest”)]或User.IsInRole(“Admin”)

但是我的代码在MVC4ASP.NET4.5中不起作用

我不想使用角色提供程序。例如Roles.CreateRole或Roles.AddUserToRole

有人能帮我吗
谢谢

即使在MVC 4.NET 4.0下,我也可以重新编写该问题。不知道为什么它不能在.NET4.0下为您重新编程

看起来,即使您在Application_AuthenticateRequest中替换了主体。通过简单的成员代码,主体将最终被System.Web.Security.RolePrincipal替换,我相信RolePrincipal将查询数据库以获取用户的角色数据。由于您不使用RoleProvider,RolePrincipal将不包含任何角色数据,它将从以前的主体中删除角色数据

一种可能的解决方法是将应用程序_AuthenticateRequest更改为应用程序_AuthorizeRequest,这在简单的成员资格设置RolePrincipal之后发生。 顺便说一句,您应该将HttpContext.User和Thread.CurrentPrincipal都设置为同一个用户


请告诉我上述解决方法是否适用于您。

在.NET 4.5中,GenericPrincipal现在继承自System.Security.Claims.ClaimsPrincipal;以前它是从System.Object继承的


我们的应用程序将其存储在会话(数据库)中,但它似乎以不同的方式序列化和反序列化了一些声明内部,因为我遇到了类似的问题,缺少了角色。

Hi Hongye,感谢您的帮助它现在正在工作,是的,您是对的,主要用户角色被System.Web.Security.RolePrincipal替换,并试图从数据库中获取角色。