2016-02-22 88 views
1

我已按照此guide向IPrincipal添加自定义特性。无法将类型'CustomPrincipal'转换为'System.Security.Principal.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. 
     } 
    } 

这是最后一行发生错误。

Cannot implicitly convert type 'SocialMedia.Models.CustomPrincipal' to 'System.Security.Principal.IPrincipal'. An explicit conversion exists (are you missing a cast?)

可能是为什么它不起作用的问题。

+1

如何声明'CustomPrincipal'类? – Sakura

回答

1

的错误是很清楚,你是分配给User财产的情况下,需要IPrincipal型的情况下,我怀疑你的CustomPrincipal类不是从IPrinicipal接口继承,那是因为你所看到的错误。

0

更改最后一行:

HttpContext.Current.User = (IPrincipal)newUser; 

编辑

确保ICustomPrincipal扩展IPrincipal接口。

+0

引发错误: 'SocialMedia.Models.CustomPrincipal'类型的对象无法转换为类型'System.Security.Principal.IPrincipal' –

+0

@CarstenLøvboAndersen,那么您的'CustomPrincipal'实施或您的' ICustomPrincipal'接口。添加到您的问题pelase。 –

相关问题