我的ASP.NET MVC4网站上有一个基本控制器,它有一个简单的构造函数:
public class BaseController : Controller
{
protected MyClass Foo { get; set; }
public BaseController()
{
if (User.Identity.IsAuthenticated))
{
Foo = new MyClass();
}
}
}
但是我无法在这里访问用户.它是空的.但是在我继承的控制器上它很好.
谢谢
解决方法
控制器实例化将在授权发生之前进行.即使您的MVC应用程序多次调用RenderAction()并最终创建了五个不同的控制器,这些五个控制器也将在任何
OnAuthorization发生之前创建.
处理这些情况的最佳方法是使用Action Filters. Authorize 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"]; }
}
}