2009-09-10 61 views
2

我创建了一个抽象控制器类(ApplicationController)用于处理某些用户身份验证,但在调用代码时未初始化HttpContext如何从抽象基础控制器访问HttpContext?

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

回答

0

试着让你的.ctor保护

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

也确保你不会错过这个使用指令:

using System.Web.Mvc; 
+0

这有什么区别,如果构造函数是由保护? – San 2009-09-10 02:07:23

+0

@San:阅读http://msdn.microsoft.com/en-us/library/ms229047.aspx – 2009-09-10 02:16:31

3

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

总之,解决方法很简单 - 覆盖控制器的初始化方法:

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