【问题标题】:Cannot convert type 'CustomPrincipal' to 'System.Security.Principal.IPrincipal'无法将类型“CustomPrincipal”转换为“System.Security.Principal.IPrincipal”
【发布时间】:2016-06-03 22:04:30
【问题描述】:

我已按照guide 向 IPrincipal 添加自定义属性。

protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            CustomPrincipalSerializeModel serializeModel = serializer.Deserialize<CustomPrincipalSerializeModel>(authTicket.UserData);
            CustomPrincipal newUser = new CustomPrincipal(authTicket.Name);
            newUser.UserId = serializeModel.UserId;
            newUser.FirstName = serializeModel.FirstName;
            newUser.LastName = serializeModel.LastName;
            HttpContext.Current.User = newUser; /This line makes an error.
        }
    }

这是出错的最后一行。

无法将类型“SocialMedia.Models.CustomPrincipal”隐式转换为“System.Security.Principal.IPrincipal”。存在显式转换(您是否缺少演员表?)

为什么它不工作可能是什么问题?

【问题讨论】:

  • 你如何声明CustomPrincipal类?

标签: c# .net model-view-controller iprincipal


【解决方案1】:

错误很明显,您分配给User 属性的实例需要IPrincipal 类型的实例,我怀疑您的CustomPrincipal 类不是从IPrinicipal 接口继承的,那是因为您看到的是错误。

【讨论】:

    【解决方案2】:

    将最后一行改为:

    HttpContext.Current.User = (IPrincipal)newUser;
    

    编辑

    确保ICustomPrincipal 扩展了IPrincipal 接口。

    【讨论】:

    • 抛出错误:“SocialMedia.Models.CustomPrincipal”类型的对象无法转换为“System.Security.Principal.IPrincipal”类型
    • @CarstenLøvboAndersen,那么您的CustomPrincipal 实现或ICustomPrincipal 接口中一定有错误。将两者都添加到您的问题中。