【问题标题】: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;