首页>教程>.NET Core>从 ClaimsPrincipal.Current 迁移

此组别内的文章

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

从 ClaimsPrincipal.Current 迁移

内容纲要

在 ASP.NET 4.x 项目中,通常使用 ClaimsPrincipal.Current 来检索当前经过身份验证的用户的标识和声明。 在 ASP.NET Core 中,不再设置此属性。 依赖于它的代码需要进行更新,以便通过不同的方式获取当前经过身份验证的用户的标识。

以特定于上下文的状态代替静态状态

使用 ASP.NET Core 时,不会设置 ClaimsPrincipal.Current 和 Thread.CurrentPrincipal 的值。 这些属性都表示静态状态,ASP.NET Core 通常会避免使用静态状态。 相反,ASP.NET Core 使用依赖项注入 (DI) 来提供依赖项,例如当前用户的标识。 从 DI 获取当前用户的标识也更易于测试,因为可以轻松注入测试标识。

在 ASP.NET Core 应用中检索当前用户

可使用以下几个选项在 ASP.NET Core 中检索当前经过身份验证的用户的 ClaimsPrincipal,以代替 ClaimsPrincipal.Current

  • ControllerBase.User。 MVC 控制器可以使用其 User 属性访问当前经过身份验证的用户。
  • HttpContext.User。 有权访问当前 HttpContext(例如中间件)的组件可以从 HttpContext 获取当前用户的 ClaimsPrincipal
  • 从调用方传入。 无法访问当前 HttpContext 的库通常从控制器或中间件组件调用,并且可以将当前用户的标识作为参数传递。
  • IHttpContextAccessor。 迁移到 ASP.NET Core 的项目可能太大,无法轻松地将当前用户的标识传递到所有必要的位置。 在这种情况下,可以使用 IHttpContextAccessor 作为解决方法。 IHttpContextAccessor 能够访问当前的 HttpContext(如果存在)。 如果使用 DI,请参阅在 ASP.NET Core 中访问 HttpContext。 若要在代码中获取当前用户的标识,但代码尚未更新,无法与 ASP.NET Core 的 DI 驱动体系结构配合使用,可使用以下短期解决方案:
    • 通过在 Startup.ConfigureServices 中调用 IHttpContextAccessor,使 IHttpContextAccessor 在 DI 容器中可用。
    • 在启动期间获取 IHttpContextAccessor 的实例并将其存储在静态变量中。 该实例可用于之前从静态属性中检索当前用户的代码。
    • 使用 HttpContextAccessor.HttpContext?.User 检索当前用户的 ClaimsPrincipal。 如果在 HTTP 请求的上下文之外使用此代码,则 HttpContext 为 null。

最后一个选项是使用存储在静态变量中的 IHttpContextAccessor 实例,这与 ASP.NET Core 优先注入依赖项而不是静态依赖项的原则相反。 该选项计划最终从 DI 检索 IHttpContextAccessor 实例。 不过,在迁移使用 ClaimsPrincipal.Current 的大型现有 ASP.NET 应用时,静态帮助程序可以起到过渡衔接的作用。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索