Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我是否可以从控制器初始值设定项访问HttpContext?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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的文章。