Rowan Freeman对this question的回答描述了在控制器的构造函数中User.Identity
为空的原因。对同一问题的评论指出System.Web.HttpContext.Current.User
确实在同一上下文中产生了预期值。
为什么System.Web.HttpContext.Current.User
在控制器的构造函数中有效,即使User.Identity
不是?
在控制器的构造函数中使用System.Web.HttpContext.Current
是否可能导致错误?
编辑以澄清:
在链接文章中,关于User.Identity
:" Controller实例化将在授权发生之前进行。即使您的MVC应用程序多次调用RenderAction()并最终创建了五个不同的控制器,也会在任何OnAuthorization发生之前创建这五个控制器。"
以上段落不适用于System.Web.HttpContext.Current
吗?我希望能够更好地理解两者之间的细微差别,使它们看起来表现得不同,希望能够理解System.Web.HttpContext.Current
是否可以在个别动作之外但在控制器内部使用。
答案 0 :(得分:0)
在控制器的构造函数中使用System.Web.HttpContext.Current会导致错误吗?
它会引入不合需要的依赖关系,例如,这将阻止您正确地对控制器进行单元测试。
您可以考虑改为覆盖Controller.Initialize
来添加自己的初始值