2

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

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

2 回答 2

3

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

总之,解决方案很简单——重写控制器的 Initialize 方法:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    string myuser = this.User.Identity.Name;
    base.Initialize(requestContext);
}
于 2009-09-10T19:17:15.797 回答
0

尝试使您的 .ctor 受到保护

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

还要确保你没有错过这个 using 指令:

using System.Web.Mvc;
于 2009-09-10T01:33:28.417 回答