tak*_*shi 8 authentication asp.net-mvc controller
我ControllerBase在ASP.NET MVC应用程序中有一个类.其他控制器继承自ControllerBase.
我想进入HttpContext.User.Identity.Name,但HttpContext是null.怎么了?
public ControllerBase()
{
var dataManager=new DataManager();
if (HttpContext.User.Identity.IsAuthenticated) // throws error
{
ViewData["assets"] = ud.BalanceFreeze + ud.Balance + ud.BalanceRealty;
ViewData["onaccount"] = ud.Balance;
ViewData["pending"] = ud.BalanceFreeze;
ViewData["inrealty"] = ud.BalanceRealty;
}
Run Code Online (Sandbox Code Playgroud)
Nik*_*Nik 11
尝试在ControllerBase中将此代码添加到此事件:
protected override void Initialize(RequestContext requestContext){
}
Run Code Online (Sandbox Code Playgroud)
在ASP.NET设置HttpContext之前构造您的控制器.就像Nik说的那样,你需要把这个代码放在你班级的重写方法中.
我还要指出,直接依赖于HttpContext将无法在任何扩展此类的控制器上执行单元测试.这就是为什么类中的许多方法(如Execute方法)ControllerBase将a RequestContext作为参数.你可以说:
protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
var currentUser = requestContext.HttpContext.User;
...
}
Run Code Online (Sandbox Code Playgroud)
...这使得可以使用"假"上下文创建和执行控制器以进行单元测试.