【问题标题】:Asp.Net accessing Claims Identity in an external assembly [closed]Asp.Net 在外部程序集中访问 Claims Identity [关闭]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2018-06-04
    • 2010-10-29
    • 2017-04-23
    • 2011-04-21
    • 2011-08-20
    • 2017-09-03
    相关资源
    最近更新 更多