C# MVC2的自定义授权似乎与IsInRole()有问题

C# MVC2的自定义授权似乎与IsInRole()有问题,c#,asp.net-mvc-2,authorization,C#,Asp.net Mvc 2,Authorization,在我的AccountController中,我有如下代码: ControllerContext.HttpContext.User = new MyAppUserPrincipal(user); 当我在调试器中逐步执行此操作时,我可以看到ControllerContext.HttpContext.User.IsInRole(“Admin”)为true 接下来,我有一个受自定义属性保护的HomeController: [AuthorizeMyApp(Roles = "Admin")] 在属性的定

在我的AccountController中,我有如下代码:

ControllerContext.HttpContext.User = new MyAppUserPrincipal(user);
当我在调试器中逐步执行此操作时,我可以看到ControllerContext.HttpContext.User.IsInRole(“Admin”)为true

接下来,我有一个受自定义属性保护的HomeController:

[AuthorizeMyApp(Roles = "Admin")]
在属性的定义中,我有:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var principal = filterContext.HttpContext.User ;
    if (! principal.IsInRole(_roles) )
等等

在登录并试图回家后,奇怪的是:

principal.Identity.Name具有预期名称,且IsAuthenticate为true;然而 a) principal.IsInRole(“管理员”)为false b) (主体作为MyAppUserPrincipal)为空


我做错什么了吗?(使用MVC2)

我对MVC2也不熟悉,但我想我会加入进来。这可能是因为您没有在
AuthorizeCore(HttpContextBase-httpContext)
方法中执行实际授权吗

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return httpContext.User.IsInRole("Admin");
    }
}

感谢您的回答,但事实证明有两个单独的请求正在进行:登录以设置cookie,但登录后的重定向(导致Authorize属性激发)是一个单独的请求。与任何ASP.NET应用程序一样,将自定义用户放入上下文的位置仍然是global.asax中的Application_BeginRequest。我认为我对自己的MVC技能水平缺乏信心,这让我对自己已经知道的事情视而不见。很抱歉给大家带来不便-希望这个答案有帮助