我想要一个基本控制器,它应该为每个控制器操作设置身份验证变量:
_claimsIdentity = User.Identity as ClaimsIdentity;
_userId = claimsIdentity.FindFirst("ID")?.Value;
不幸的是,ControllerBase.User 在构造函数中为 null,并且 ControllerBase 上没有按照建议覆盖的 Initialize 方法here。
如何制作一个已为每个操作设置这些值的基本控制器?
控制器在管道中较早初始化。User
属性已设置。这意味着如果您尝试在构造函数中访问它,它将为空。
当调用操作时,框架已经分配了从请求中提取的必要值。所以建议访问User
动作中的属性。
作为在基本控制器构造函数上设置字段的替代方法,您可以使用属性来实现您正在寻找的内容。例如。:
protected ClaimsIdentity ClaimsIdentity => User.Identity as ClaimsIdentity;
protected string UserId => ClaimsIdentity.FindFirst("ID")?.Value;
并从派生子类的操作中访问它们。
子类不会有任何不同 - 唯一的区别是属性的命名约定不同,但如果这个really让你心烦意乱,你could始终使用您以前使用的相同名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)