我有时在派生类中得到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
。仅仅是崩溃还是我需要对代码进行任何更改?
答案 0 :(得分:0)
Controller
已经具有User
属性。
好的,您尝试创建一个 new ,但是不需要在那里直接耦合到HttpContext
。
将基本属性设置为您的自定义原则。
public abstract class BaseController : Controller {
protected virtual new CustomPrincipal User {
get { return base.User as CustomPrincipal; }
}
}
它使用户来自同一地方。
public IPrincipal User
{
get { return HttpContext == null ? null : HttpContext.User; }
}
执行操作的风险是,您需要确保原理是匹配类型的(在这种情况下,您是自定义原理),否则强制类型转换将导致属性始终返回 null 。
那是因为如果当前请求的用户未通过身份验证,您可能会获得匿名用户的原则,由于不是您的CustomPrincipal
,这将导致返回 null 当User
被调用时。