HttpContext在派生类中为null

时间:2018-07-27 07:00:22

标签: c# asp.net-mvc inheritance controller

我有时在派生类中得到HttpContext null。我目前正在将BaseController继承到ActionLogsController中。

只看我的代码:

BaseController:

public abstract class BaseController : Controller
{
    protected virtual new CustomPrincipal User
    {
        get { return HttpContext.User as CustomPrincipal; }
    }
}

ActionLogsController:

public class ActionLogsController : BaseController
{
    public ActionResult AddActionLog(ActionLogModel model)
    {
        var name = user.name;
    }
}

我做错了什么?它有时会给null。仅仅是崩溃还是我需要对代码进行任何更改?

1 个答案:

答案 0 :(得分:0)

Controller已经具有User属性。

好的,您尝试创建一个 new ,但是不需要在那里直接耦合到HttpContext

将基本属性设置为您的自定义原则。

public abstract class BaseController : Controller {
    protected virtual new CustomPrincipal User {
        get { return base.User as CustomPrincipal; }
    }
}

它使用户来自同一地方。

Controller.cs

public IPrincipal User
{
    get { return HttpContext == null ? null : HttpContext.User; }
}

执行操作的风险是,您需要确保原理是匹配类型的(在这种情况下,您是自定义原理),否则强制类型转换将导致属性始终返回 null

那是因为如果当前请求的用户未通过身份验证,您可能会获得匿名用户的原则,由于不是您的CustomPrincipal,这将导致返回 null User被调用时。