如何从抽象基础控制器访问HttpContext?

时间:2009-09-10 01:09:45

标签: c# asp.net-mvc controller initialization httpcontext

我已经创建了一个抽象控制器类(ApplicationController)来处理一些用户身份验证,但是在调用代码时没有初始化HttpContext

public abstract class ApplicationController : Controller
{
    public ApplicationController()        
    {
        string myuser = HttpContext.User.Identity.Name; // NullReferenceException
    }
}

2 个答案:

答案 0 :(得分:3)

Yassir在抽象类中使用受保护的构造函数是正确的。但你是正确的,它没有解决你的问题 - HttpContext仍然没有完全填充,所以你得到空引用异常。

无论如何,解决方案很简单 - 覆盖控制器的Initialize方法:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    string myuser = this.User.Identity.Name;
    base.Initialize(requestContext);
}

答案 1 :(得分:0)

尝试使你的.ctor受保护

public abstract class ApplicationController : Controller 
{
    protected ApplicationController()
    {
        string myuser = this.User.Identity.Name;
    } 
}

还要确保您没有错过使用指令:

using System.Web.Mvc;