【问题标题】:How do I access HttpContext from an abstract base Controller?如何从抽象基础控制器访问 HttpContext?
【发布时间】:2009-09-10 01:09:44
【问题描述】:

我创建了一个抽象控制器类 (ApplicationController) 来处理一些用户身份验证,但是当代码被调用时,HttpContext 没有被初始化。

public abstract class ApplicationController : Controller
{
    public ApplicationController()        
    {
        string myuser = HttpContext.User.Identity.Name; // NullReferenceException
    }
}

【问题讨论】:

    标签: c# asp.net-mvc controller initialization httpcontext


    【解决方案1】:

    Yassir 关于在抽象类中使用受保护的构造函数是正确的。但是你是对的,它不能解决你的问题——HttpContext 还没有完全填充,所以你得到空引用异常。

    总之,解决方法很简单——重写控制器的Initialize方法:

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        string myuser = this.User.Identity.Name;
        base.Initialize(requestContext);
    }
    

    【讨论】:

      【解决方案2】:

      尝试让你的 .ctor 受到保护

      public abstract class ApplicationController : Controller 
      {
          protected ApplicationController()
          {
              string myuser = this.User.Identity.Name;
          } 
      }
      

      还要确保你没有错过这个 using 指令:

      using System.Web.Mvc;
      

      【讨论】:

      • 如果对 ctor 进行保护会有什么不同?
      猜你喜欢
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多