如何从用户声明填充控制器字段?我们使用基于声明的身份验证,我对其中一个声明值感兴趣,例如"内部ID",该值与用户声明一起发送。
我需要提取此声明值,并使其可用于我的所有 Web API。我知道我可以使用每个操作方法中的循环从用户声明中提取值。
有没有更好的方法可以做到这一点?像属性/值提供者<</p>
您可以在 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;
}
您可以在任何可以访问上下文对象(如控制器或 ApiController )的地方调用它
User.Identity.GetInternalId();
可以创建一个自定义值提供程序,用于从当前用户标识读取声明,然后拥有一个表示键/值对列表的类,该列表是操作方法中的声明/值。
这将导致值提供程序填充键/值对,并且无需编写任何其他代码即可在任何操作方法中让用户声明