可以通过以下方式bind actions' parameters进行
:validation_split
请求正文[FromBody]
请求正文中的表单数据[FromForm]
请求标头[FromHeader]
请求查询字符串参数[FromQuery]
路由当前请求中的数据[FromRoute]
我经常需要从JWT中提取内容,几乎总是从[FromServices]
(主键)中提取内容。所以我这样做(暂时忽略错误检查):
id
如果能将其放入如下所示的属性绑定器中,那就太好了
var id = int.Parse(base.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);
或者也许用public IActionResult doStuff([FromBody] MyModel model, [FromJwt] int id) {
// id works automatically
}
来简化它。
这可能吗?
答案 0 :(得分:3)
我认为可以使用HttpParameterBinding
创建此类属性。
微软对此有tutorial。
答案 1 :(得分:0)
声明中提供了您需要的JWT令牌中的所有内容,您可以通过身份访问它们。
如果您想重复一些,可以创建一个抽象类,该抽象类从Controller继承而您的Controllers从该BaseController继承,以实现可重用和快速访问的实现,或者实现一些UserService来提供与用户相关的所有内容,将其注册到StartUp文件中,然后NetCore为您复制
(System.Security.Claims.ClaimsIdentity)User.Identity