c#-4.0 – 在我的基本控制器构造函数上获取用户标识

我的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"]; }
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...