C# 为什么可以';我是否可以从控制器初始值设定项访问HttpContext?
我的控制器设置如下:C# 为什么可以';我是否可以从控制器初始值设定项访问HttpContext?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我的控制器设置如下: public class GenesisController : Controller { private string master; public string Master { get { return master; } } public GenesisController() { bool mobile = this.HttpContext.Request.Browser.IsMobileDevice; // t
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";
}
}
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";
}
我的所有其他控制器都继承自此GenesisController。无论何时运行应用程序,都会出现以下错误
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
如何从控制器初始化访问HttpContext和?,因为HttpContext在控制器构造函数中不可用。您可以在可访问的位置重写Initialize方法,如下所示:
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";
}
}
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";
}
此外,我敢打赌,您尝试使用此主变量和布尔值所做的事情可能会在一段时间内得到解决,而不是让您的控制器担心这样的事情。感谢您链接到Scott Hanselman的文章。一开始我觉得他的方法太复杂,有点过火。。。但在与我的appraoch合作后,a意识到了所有需要考虑的不同场景。现在,我已经按我的方式工作了。但是,当我为实时站点重新访问这个时,我可能会关注Scott的文章。