C# 将ASP.NET核心操作参数绑定到JWT声明

C# 将ASP.NET核心操作参数绑定到JWT声明,c#,asp.net-core,jwt,model-binding,asp.net-core-2.2,C#,Asp.net Core,Jwt,Model Binding,Asp.net Core 2.2,可以通过以下方式: [FromBody]请求正文 [FromForm]请求正文中的表单数据 [FromHeader]请求头 [FromQuery]请求查询字符串参数 [FromRoute]当前请求的路由数据 [FromServices] 我经常需要从JWT中提取一些东西,几乎总是id(主键)。所以我这样做(暂时忽略错误检查): 如果我能将其放入如下工作的属性绑定器中,那就太好了: public IActionResult doStuff([FromBody] MyModel model, [

可以通过以下方式:

  • [FromBody]
    请求正文
  • [FromForm]
    请求正文中的表单数据
  • [FromHeader]
    请求头
  • [FromQuery]
    请求查询字符串参数
  • [FromRoute]
    当前请求的路由数据
  • [FromServices]
我经常需要从JWT中提取一些东西,几乎总是
id
(主键)。所以我这样做(暂时忽略错误检查):

如果我能将其放入如下工作的属性绑定器中,那就太好了:

public IActionResult doStuff([FromBody] MyModel model, [FromJwt] int id) {
  // id works automatically
}
或者可以用
[FromJwtId]
来简化它


这样做可能吗?

我认为可以使用
HttpParameterBinding
创建这样的属性


微软对此有明确的规定。

声明中提供了您从JWT代币所需的一切,您可以通过身份访问这些代币

如果您想要一些重复性,一种方法是创建一个从Controller继承的抽象类,并且您的控制器从该BaseController继承,以实现可重用和快速访问,或者实现一些UserServices,提供与用户相关的一切,在启动文件中注册它,然后NetCore为您将其删除

(System.Security.Claims.ClaimsIdentity)User.Identity

我知道我可以把它放到一个基类中,但我想让它工作。此外,我可以在以后添加检查,如果数据无效,自动返回400或类似的。太好了!它被深深地埋在一个叫做“指南”的部分下面,所以从未见过它可惜没有更简单的方法,但我知道从哪里开始,谢谢!
(System.Security.Claims.ClaimsIdentity)User.Identity