为什么我不能从控制器初始化器访问HttpContext ?

本文关键字:访问 HttpContext 初始化 控制器 不能 为什么 | 更新日期: 2023-09-27 18:03:38

我有一个这样设置的控制器:

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和从控制器初始化?

为什么我不能从控制器初始化器访问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";
}

我也敢打赌,你试图用这个主变量和布尔值做的事情可能会以一种更优雅的方式解决,而不是让你的控制器担心这样的事情。