asp.net-mvc-2 – 在MVC中实现自定义标识和IPrincipal
我有一个基本的MVC 2 beta应用程序,我试图实现一个自定义的身份和Principal类。
我创建了实现IIdentity和IPrincipal接口的类,实例化它们,然后将CustomPrincipal对象分配给Global.asax的Application_AuthenticateRequest中的Context.User。 这一切都成功,对象看起来不错。当我开始渲染视图时,页面现在失败。第一个失败是在以下代码行的默认LogoOnUserControl视图中: [ <%= Html.ActionLink("Log Off","LogOff","Account") %> ] 如果我把它拉出来,然后在不同的“Html.ActionLink”代码行失败。 我收到的错误是:
在我的身份中需要实现一些额外的属性,以便在MVC中使用自定义标识?我试图在Identity类中实现[Serializable()],但它似乎没有影响。 更新: GenericIdentity ident = new GenericIdentity("jzxcvcx"); GenericPrincipal princ = new GenericPrincipal(ident,null); Context.User = princ; 但是,这让我无处可寻,因为我试图使用CustomIdentity来保存几个属性。如果我实现了IIdentity / IPrincipal接口,或者为我的CustomIdentity / CustomPrincipal继承了GenericIdentity / GenericPrincipal,那么它将失败,并出现上面的原始错误。 解决方法
我从网络中得到了一些帮助,我想到了这一点:)诀窍是你必须在实现IIdentity的类中实现ISerializable接口。我希望这有助于保存别人一些时间:)
班级申报: [Serializable] public class ForumUserIdentity : IIdentity,ISerializable 实现ISerializable: #region ISerializable Members public void GetObjectData(SerializationInfo info,StreamingContext context) { if (context.State == StreamingContextStates.CrossAppDomain) { GenericIdentity gIdent = new GenericIdentity(this.Name,this.AuthenticationType); info.SetType(gIdent.GetType()); System.Reflection.MemberInfo[] serializableMembers; object[] serializableValues; serializableMembers = FormatterServices.GetSerializableMembers(gIdent.GetType()); serializableValues = FormatterServices.GetObjectData(gIdent,serializableMembers); for (int i = 0; i < serializableMembers.Length; i++) { info.AddValue(serializableMembers[i].Name,serializableValues[i]); } } else { throw new InvalidOperationException("Serialization not supported"); } } #endregion 这是link to the article that has more detail on the “Feature” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET核心EF6身份
- 在文件ASP.NET C#中写入并且之后不锁定它们
- asp.net-mvc – 无法解析符号’ViewBag’
- 如何在ASP.NET MVC控制器(ActionResult)中更改返回的Conten
- 使用ASP.NET MVC进行Windows身份验证
- asp.net-mvc – ASP.Net和x86与x64
- asp.net – 我什么时候真的需要InamingContainer接口?
- ASP.NET WebApi 基于OAuth2.0实现Token签名认证
- asp.net-mvc – 如何使用SQL Server Enterprise Edition在a
- 令人敬畏的ASP.NET和C#教程初学者