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

C# 如何从抽象基控制器访问HttpContext?,c#,asp.net-mvc,controller,initialization,httpcontext,C#,Asp.net Mvc,Controller,Initialization,Httpcontext,我创建了一个抽象控制器类(ApplicationController),用于处理一些用户身份验证,但是调用代码时,HttpContext未初始化 public abstract class ApplicationController : Controller { public ApplicationController() { string myuser = HttpContext.User.Identity.Name; // NullRefere

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

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

尽量使你的.ctor受到保护

public abstract class ApplicationController : Controller 
{
    protected ApplicationController()
    {
        string myuser = this.User.Identity.Name;
    } 
}
另外,请确保您没有丢失此using指令:

using System.Web.Mvc;

Yassir在抽象类中使用受保护的构造函数是正确的。但是您是对的,它并没有解决您的问题——HttpContext仍然没有完全填充,因此您会得到空引用异常

无论如何,解决方案很简单——重写控制器的Initialize方法:

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

如果ctor受到保护,会有什么区别?