我有一个自定义用户类,它继承自我的asp.net核心应用程序中的ClaimsPrincipal类
public class SecurityUser : ClaimsPrincipal
{
private bool _isOwnerUser =false;
public bool IsOwnerUser
{
get { return _isOwnerUser; }
}
}
然后在我的控制器中,我试图像这样将我的主要要求投给我的自定义SecurityUser
public class HomeController : Controller
{
protected SecurityUser SecurityUser
{
get
{
if (HttpContext.User.Identity.IsAuthenticated) return (SecurityUser)HttpContext.User;
else return null;
}
}
}
但是,我遇到了错误
无法将类型为“ System.Security.Claims.ClaimsPrincipal”的对象转换为类型为“ TestApp.SecurityUser”。
,这意味着ClaimsPrincipal无法转换为我的自定义安全用户。
我不明白为什么这不可能,因为在我的asp.net应用程序中,SecurityUser类继承自IPrincipal,并且我能够像这样进行投射
protected SecurityUser SecurityUser
{
get
{
if (this.HttpContext.User.Identity.IsAuthenticated) return (SecurityUser)this.HttpContext.User;
else return null;
}
}
HttpContext.User.Identity.IsAuthenticated
是真的
答案 0 :(得分:0)
您的SecurityUser类实现了正确的接口,但这并不意味着HttpContext中的实例。User确实是SecurityUser的实例。
即使对象A和B实现相同的接口,也不能将对象A的实例强制转换为对象B。
接口只是访问特定对象的一种手段,而不必知道实际上是哪种对象。
您可能想要的是扩展方法,以添加所需的功能。