c# - Thread.CurrentPrincipal Identity.Name 在 asp.net mvc 6 (vNext) 中为空

标签 c# asp.net-mvc asp.net-core asp.net-core-mvc

我正在使用 Asp.Net MVC6 (vNext)、Identity 3.0.* beta3 开发 Web 应用程序。这是具有 UI、服务和数据库的 3 层应用程序。我能够使用 Asp.net 身份的 SignInManager 类登录用户,并且我正在尝试在服务层中检索具有角色和声明的用户详细信息,以便我可以验证用户是否有权采取某些 Action 。

我们如何从服务层的当前请求主体身份中获取当前用户名。在 MVC 5 中,我使用 Thread.CurrentPrincipal 来执行此操作。但是在 MVC6 中,Thread.CurrentPrincipalIdentity.Name 被设置为 null。

谁能告诉我该怎么做?另外,如果您有任何更好的解决方案,请告诉我。

最佳答案

如果您已调用 AddIdentity()在你的 Startup.cs 或任何你配置依赖注入(inject)的地方,它会自动注册一个单例 HttpContextAccessor满足IHttpContextAccessor服务。

此时,在你的服务层,你可以注入(inject)IHttpContextAccessor并从那里检索上下文。这假设您了解依赖注入(inject)系统的工作原理并使用它来实例化您的服务层类,而不仅仅是 new正在处理它们。

如果您希望能够方便地访问IdNameClaimsPrincipalHttpContext 中公开确保导入 System.Security.Claims这样您就可以访问为您提供 GetUserName() 的扩展程序和 GetUserId()扩展方法。

(这是与 VS2015 RC1 一起发布的 beta4 包的最新版本)

关于c# - Thread.CurrentPrincipal Identity.Name 在 asp.net mvc 6 (vNext) 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678074/

相关文章:

c# - 网络服务错误 500 内部错误 asp.net

asp.net-mvc - Razor _Layout.cshtml 来自特定 Controller 的公共(public)部分

c# - MVC - 如果未登录,网站仍然可以访问吗?

c# - 能否将 Swashbuckle 配置为包括不是参数或操作结果的 DTO?

c# - 写入事件日志时如何避免此 SecurityException?

c# - 如何在 MVC 应用程序中正确处理 Azure 事件中心接收器?

asp.net-mvc - Visual Studio 调试/加载非常慢

c# - ASP.NET Core 2 身份验证方案

c# - Azure Webjob 服务的 Microsoft.Azure.ServiceBus.Message 支持

c# - 正则表达式而不是 string.replace 函数