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

qua*_*els 6 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";
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 16

因为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";
}
Run Code Online (Sandbox Code Playgroud)

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