【发布时间】:2018-02-04 22:23:24
【问题描述】:
我正在实现一个 Asp.Net WebApi 应用程序,其中我在声明中存储了一些用户特定的值。
我的项目由几个类库项目组成,其中包含模型和控制器。
现在我试图在主项目(在类库中)控制器之外访问声明。
//calling this from a class library
var identity = Thread.CurrentPrincipal.Identity; //No user information such as Id available
var claims = ClaimsPrincipal.Current.Claims; //Contains zero elements
这里的声明包含零个元素。但是,如果我将上面的代码放在主项目的控制器中,一切正常。
如何从外部程序集访问声明?
【问题讨论】:
-
最好传递身份,而不是依赖一些你无法控制的静态成员。使您的库也可测试。
-
@poke 我能够使用 `Thread.CurrentPrincipal.Identity;' 访问身份对象但我看不到它的用户信息。你能用简单的例子回答一下吗?
-
在您的 Web API 中,只需像这样调用您的库:
myCustomLibrary.DoSomething(currentPrincipal, otherArgument)- 即将主体传递给您的方法。 -
我只需要阅读类库控制器方法中的声明。所以我需要以某种方式访问
CurrentPrincipal对象。所以我不认为我可以使用你的建议。如果我打电话给MainAssembly.GetCurrentPrincipal()可以吗?这是一个好习惯吗?还是其他解决方案?
标签: c# asp.net-web-api asp.net-identity claims-based-identity claims