为什么我不能从Controller初始化程序访问HttpContext?

时间:2011-07-27 19:25:45

标签: 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; // 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?

1 个答案:

答案 0 :(得分:15)

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

另外我敢打赌,你试图用这个主变量和布尔值做的事情可能会在far more elegant way中解决,而不是让你的控制器担心这样的事情。