【发布时间】:2015-04-16 14:39:18
【问题描述】:
我正在使用 Asp.Net MVC6 (vNext)、Identity 3.0.* beta3 开发一个 Web 应用程序。这是具有 UI、服务和数据库的 3 层应用程序。我可以使用SignInManager 类的 Asp.net 身份登录用户,并且我正在尝试使用服务层中的角色和声明检索用户详细信息,以便我可以验证用户是否有权执行某些操作。
我们如何从服务层的当前请求主体身份获取当前用户名。在 MVC 5 中,我使用了Thread.CurrentPrincipal 来执行此操作。但是在 MVC6 中,Identity.Name 的 Thread.CurrentPrincipal 设置为 null。
有人可以告诉我该怎么做吗?另外,如果您有更好的解决方案,请告诉我。
【问题讨论】:
-
我知道 HttpApplication 对象在获取线程时将线程的主体设置为 HttpContext 的。你试过HttpContext.Current.User,也为空吗?
-
@RazvanDumitru 感谢您的回复。能否告诉我如何在 Service 层获取 HttpContext ?
-
ASP.Net 5 以完全可单元测试的方式编写,尽可能少的静态属性。因此,诸如用户主体之类的值应作为参数传递到您的服务层。 (这并不是真正的答案,而是建议遵循公认的设计模式。)此外,
async正在改变事物的方式,线程特定的信息可能会丢失。 -
@MattDeKrey 是对的。您应该始终将您的上下文数据和用户信息数据(尤其是)以及您需要的所有值作为参数传递给服务层。
标签: c# asp.net-mvc asp.net-core asp.net-core-mvc