ControllerBase中的HttpContext.Current.User为null(asp.net mvc)

时间:2010-09-13 20:47:41

标签: asp.net-mvc authentication controller

我在ASP.NET MVC应用程序中有一个ControllerBase类。其他控制器继承自ControllerBase

我想访问HttpContext.User.Identity.Name,但HttpContextnull。怎么了?

public ControllerBase()
        {
            var dataManager=new DataManager();
            if (HttpContext.User.Identity.IsAuthenticated) // throws error
            {                    
                ViewData["assets"] = ud.BalanceFreeze + ud.Balance + ud.BalanceRealty;
                ViewData["onaccount"] = ud.Balance;
                ViewData["pending"] = ud.BalanceFreeze;
                ViewData["inrealty"] = ud.BalanceRealty;
            }

2 个答案:

答案 0 :(得分:11)

尝试在ControllerBase中将此代码添加到此事件中:

protected override void Initialize(RequestContext requestContext){

}

答案 1 :(得分:5)

您的控制器在ASP.NET设置HttpContext之前构建。就像Nik说的那样,你需要把这个代码放在你班上的重写方法中。

我还要指出,直接依赖于HttpContext将无法在任何扩展此类的控制器上执行单元测试。这就是ControllerBase类中的许多方法(如Execute方法)将RequestContext作为参数的原因。你可以说:

protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
    var currentUser = requestContext.HttpContext.User;
    ...
}

...这使得可以使用“假”上下文创建和执行控制器以进行单元测试。