0

我正在实现一个Asp.Net WebApi应用程序,我在声明中存储了一些用户特定的值。Asp.Net访问外部程序集中的声明标识

我的项目由几个类库项目组成,它包含模型和控制器。

现在我试图访问除主项目(在类库)控制器之外的索赔。

//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 

这里的权利要求包含零个元素。但如果我把上面的代码放在主项目的控制器中,一切正常。

如何从外部装置访问声明?

+1

这可能是一个更好的主意,只是*传递*身份,而不是依赖一些你无法控制的静态成员。使你的库可测试。 – poke

+0

@poke我能够使用'Thread.CurrentPrincipal.Identity;'来访问标识对象但我无法看到它的用户信息。您能否以简单的例子提供答案? – Rahul

+0

在您的Web API中,只需调用您的库,如下所示:'myCustomLibrary.DoSomething(currentPrincipal,otherArgument)' - 即将主体传递给您的方法。 – poke

回答

1

经过一番调查,我从启动配置类中删除了SuppressDefaultHostAuthentication();。 现在Thread.CurrentPrincipal.Identity按预期工作。