在我的基本Controller构造函数上获取用户标识

时间:2013-10-07 22:42:48

标签: c#-4.0 asp.net-mvc-4 asp.net-membership .net-4.5

我的ASP.NET MVC4网站上有一个基本Controller,它的构造函数很简单:

public class BaseController : Controller
{
    protected MyClass Foo { get; set; }
    public BaseController()
    {
        if (User.Identity.IsAuthenticated))
        {
            Foo = new MyClass();
        }
    }
}

但是我无法在此处访问User。它是null。但是对于我继承的控制器,没关系。

由于

2 个答案:

答案 0 :(得分:9)

控制器实例化将在授权发生之前进行。即使您的MVC应用程序多次调用RenderAction()并且您最终创建了五个不同的控制器,也会在任何OnAuthorization之前创建这五个控制器。

处理这些情况的最佳方法是使用Action FiltersAuthorize Attribute提前解雇,可能适合您的情况。

首先,让我们创建一个 AuthorizationFilter

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyClassAuthorizationAttribute : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Controller.ViewData["MyClassInstance"] = new MyClass();
        }
    }
}

现在让我们更新控制器

[MyClassAuthorization]
public class BaseController : Controller
{
    protected MyClass Foo
    {
        get { return (MyClass)ViewData["MyClassInstance"]; }
    }
}

答案 1 :(得分:4)

在这种情况下,我会override Controller Initialize method

Values