如何从用户声明中填充控制器字段?我们使用基于声明的身份验证,我对其中一个声明值“内部ID”感兴趣,该声明与用户声明一起发送。
我需要提取此声明值,并将其用于我的所有网络API。我知道我可以使用每个操作方法中的循环从用户声明中提取值。
有更好的方法吗?像某个属性/价值提供者
答案 0 :(得分:0)
您可以在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();
答案 1 :(得分:0)
您可以创建一个自定义值提供程序,该提供程序从当前用户标识中读取声明,然后使用一个类来表示键/值对列表,它是操作方法中的声明/值。
这将使价值提供者填写键/值对,您不必编写任何其他代码以让用户声明任何操作方法