2011-07-27 53 views
5

我有一个控制器设置是这样的:为什么我无法从Controller初始化程序访问HttpContext?

public class GenesisController : Controller 
{ 

    private string master; 
    public string Master { get { return master; } } 

    public GenesisController() 
    { 
     bool mobile = this.HttpContext.Request.Browser.IsMobileDevice; // this line errors 
     if (mobile) 
      master="mobile"; 
     else 
      master="site"; 
    } 

} 

我所有的其他控制器,从这个GenesisController继承。每当我运行应用程序,我得到这个错误说

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

我怎样才能访问HttpContext和从控制器初始化?

回答

15

因为HttpContext在控制器构造函数中不可用。你可以重写初始化方法,它可以被访问,就像这样:

protected override void Initialize(RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 
    bool mobile = this.HttpContext.Request.Browser.IsMobileDevice; // this line errors 
    if (mobile) 
     master="mobile"; 
    else 
     master="site"; 
} 

而且我敢打赌,你正在尝试与该主变做和布尔值可能会在far more elegant way来解决不是有你的控制器担心像这样的东西。

+0

谢谢链接到Scott Hanselman的文章。起初,我认为他的方法太复杂了,有点矫枉过正......但是在完成了我的工作后,我意识到了所有需要考虑的不同情况。 现在,我已经按照自己的方式工作了。但是,当我重新访问这个网站时,我可能会按照Scott的文章。 – quakkels

相关问题