我创建了一个服务类来检索用户声明:
public class UserClaimsService : IUserClaimsService
{
public long ProvinceId { get; }
public long UserId { get; }
public long LoginChart { get; }
public UserClaimsService(IHttpContextAccessor httpContextAccessor)
{
ClaimsPrincipal? user = httpContextAccessor.HttpContext.User;
if (user.Identity.IsAuthenticated && user != null)
{
UserId = long.Parse(user.Claims.First(a => a.Type == ClaimTypes.NameIdentifier).Value);
ProvinceId = long.Parse(user.Claims.First(a => a.Type == "ProvinceId").Value);
LoginChart = long.Parse(user.Claims.First(a => a.Type == "ChartId").Value);
}
}
}
public interface IUserClaimsService
{
public long ProvinceId { get; }
public long UserId { get; }
public long LoginChart { get; }
}
此服务已向 AddScoped 注册。但是,我不确定如何在请求模型中一致地动态设置这些可选属性(例如,ProvinceId、LoginChart)。使用全局过滤器是在请求模型中动态设置这些属性的好方法吗?我如何才能实现这一目标?是否有我应该注意的性能注意事项或最佳实践?
您可能使用一些内置绑定器,例如 [FromQuery] 或 [FromHeader] 属性。您的自定义绑定器可以从当前身份读取声明并根据声明名称绑定一个值。更多相关内容请参见
文章。