我有一个 .Net 6 API,我使用 JWT 进行身份验证。 我的 JWT 令牌有一个自定义声明:“customId”。
在我所有控制器的每个方法中,我都想获取customId。
我已经知道我可以使用以下方法获得它:
HttpContext (`var identity = HttpContext.User.Identity as ClaimsIdentity;(...)`)
或用户 (
User.Claims.SingleOrDefault(...)
)
但我想直接在每个授权控制器(或方法)上获取它注入,所以我不必每次都从
HttpContext
或User
获取它。
有人知道我该怎么做吗?
您可以创建一个基本控制器类并定义在内部获取声明实现。
类似:
public abstract class BaseController : ControllerBase
{
protected string? GetCustomIdClaimValue()
{
return HttpContext?.User?.Claims?.FirstOrDefault(o => o.Type == "sometype")?.Value;
}
}
然后您可以将每个控制器声明为此类的子级:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : BaseController
{
[HttpGet]
public IActionResult Get()
{
return Ok(GetCustomIdClaimValue());
}
}