为什么我不能从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"; } } 

我的所有其他控制器都inheritance自这个GenesisController。 每当我运行应用程序时,我都会收到此错误消息

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

如何从控制器初始化访问HttpContext?

因为HttpContext在控制器构造函数中不可用。 您可以覆盖可以访问它的Initialize方法,如下所示:

 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"; } 

另外我敢打赌,你试图用这个主变量和布尔值做的事情可能会比让你的控制器担心这样的事情更加优雅 。