例如: 我有一个dto作为带有body属性的动作参数
public IActionResult Bar([FromBody]Foo dto)
{
var claimsIdentity = User.Identity as ClaimsIdentity;
var uid = Convert.ToInt32(claimsIdentity.Claims.FirstOrDefault(c => c.Type == "sub")?.Value);
dto.uid = uid;
_barService(dto);
return Ok();
}
public class Foo
{
public int uid {get;set;} // from claim
public string something{get;set;} // from front end request
}
当前,我有编写代码来手动向dto提供索赔值
问:在ASP网络核心中,如何将索赔值自动注入dto?
答案 0 :(得分:2)
如果您不想在控制器中重复代码,则可以将代码放入服务或辅助方法或操作过滤器中。
例如:
public class FillDtoClaimAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var claimsIdentity = context.HttpContext.User.Identity as ClaimsIdentity;
var uid = Convert.ToInt32(claimsIdentity.Claims.FirstOrDefault(c => c.Type == "sub")?.Value);
((Foo)context.ActionArguments["dto"]).uid = uid;
}
}
然后:
[FillDtoClaim]
public IActionResult Bar([FromBody]Foo dto)
{
_barService(dto);
return Ok();
}