【发布时间】:2016-05-11 06:54:45
【问题描述】:
如何根据用户声明填充控制器字段?我们使用基于声明的身份验证,我对声明值之一感兴趣,即“内部 ID”,它与用户声明一起发送。
我需要提取此声明值并使其可用于我的所有 Web api。我知道我可以使用每个操作方法中的循环从用户声明中提取值。
有没有更好的方法来做到这一点?有点像属性/值提供者
【问题讨论】:
标签: asp.net-mvc claims-based-identity claims
如何根据用户声明填充控制器字段?我们使用基于声明的身份验证,我对声明值之一感兴趣,即“内部 ID”,它与用户声明一起发送。
我需要提取此声明值并使其可用于我的所有 Web api。我知道我可以使用每个操作方法中的循环从用户声明中提取值。
有没有更好的方法来做到这一点?有点像属性/值提供者
【问题讨论】:
标签: asp.net-mvc claims-based-identity claims
您可以创建一个自定义值提供程序,从当前用户身份读取声明,然后拥有一个表示键/值对列表的类,即您的操作方法中的声明/值。
这将使值提供者填充键/值对,您无需编写任何额外的代码来让用户在任何操作方法中声明
【讨论】:
您可以在 IIdentity 上使用扩展方法来提取声明,我就是这样做的:
public static int GetInternalId(this IIdentity identity)
{
var storedClaim = ((ClaimsIdentity)identity).FindFirstValue("InternalId");
if (string.IsNullOrEmpty(storedClaim)) return 0;
var value = Convert.ToInt32(storedClaim);
return value;
}
您可以在任何可以访问 Context 对象(如 Controller 或 ApiController)的地方调用它
User.Identity.GetInternalId();
【讨论】: