2011-07-27 51 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

相關問題