为什么 System.Web.HttpContext.Current.User 在控制器构造函数期间解析,但 User.Identity 不解析

Why does System.Web.HttpContext.Current.User resolve during a controller constructor, but User.Identity does not

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 instantiation will occur before authorization takes place. Even if your MVC application calls RenderAction() several times and you end up creating say, five different controllers, those five controllers will be created before any OnAuthorization takes place."

以上段落不适用于System.Web.HttpContext.Current吗?我希望更好地理解使它们表现不同的两者之间的细微差别,希望了解 System.Web.HttpContext.Current 是否可以在单个操作之外但在控制器内部使用。

Will using System.Web.HttpContext.Current during the constructor of a controller potentially result in bugs?

它会引入不良的依赖关系,例如,它会阻止您正确地对控制器进行单元测试。

您可以考虑覆盖 Controller.Initialize 而不是添加您自己的初始化