我正在使用 Asp.Net MVC6 (vNext)、Identity 3.0.* beta3 开发 Web 应用程序。这是具有 UI、服务和数据库的 3 层应用程序。我能够使用 Asp.net 身份的 SignInManager
类登录用户,并且我正在尝试在服务层中检索具有角色和声明的用户详细信息,以便我可以验证用户是否有权采取某些 Action 。
我们如何从服务层的当前请求主体身份中获取当前用户名。在 MVC 5 中,我使用 Thread.CurrentPrincipal
来执行此操作。但是在 MVC6 中,Thread.CurrentPrincipal
的 Identity.Name
被设置为 null。
谁能告诉我该怎么做?另外,如果您有任何更好的解决方案,请告诉我。
最佳答案
如果您已调用 AddIdentity()
在你的 Startup.cs 或任何你配置依赖注入(inject)的地方,它会自动注册一个单例 HttpContextAccessor
满足IHttpContextAccessor
服务。
此时,在你的服务层,你可以注入(inject)IHttpContextAccessor
并从那里检索上下文。这假设您了解依赖注入(inject)系统的工作原理并使用它来实例化您的服务层类,而不仅仅是 new
正在处理它们。
如果您希望能够方便地访问Id
或 Name
的 ClaimsPrincipal
在 HttpContext
中公开确保导入 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/