Mun*_*PhD 5 asp.net-mvc serialization
我正在尝试实现我自己的GenericIdentity实现,但在尝试加载视图时我一直收到以下错误(我正在使用asp.net MVC):
System.Runtime.Serialization.SerializationException was unhandled
by user code Message="Type is not resolved for member
'OpenIDExtendedIdentity,Training.Web, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null'."
Source="WebDev.WebHost"
Run Code Online (Sandbox Code Playgroud)
我最后得到了以下课程:
[Serializable]
public class OpenIDExtendedIdentity : GenericIdentity {
private string _nickName;
private int _userId;
public OpenIDExtendedIdentity(String name, string nickName, int userId)
: base(name, "OpenID") {
_nickName = nickName;
_userId = userId;
}
public string NickName {
get { return _nickName; }
}
public int UserID {
get { return _userId; }
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Global.asax中,我将cookie的序列化值读入内存流,然后使用它来创建我的OpenIDExtendedIdentity对象.经过各种各样的尝试后,我最终尝试了这种解决方案.它正常工作,直到它尝试渲染视图.
我基本上试图实现的是能够执行以下操作(使用asp.net中的默认角色管理器):
User.Identity.UserID
User.Identity.NickName
... etc.
Run Code Online (Sandbox Code Playgroud)
我已经列出了一些我试图解决这个问题的资料.有些人报告了Cassini错误,但似乎其他人已经成功实现了这种类型的自定义功能 - 因此令人难以置信.
我不确定这是否是完全相同的问题,但在尝试创建自己的身份实现时遇到了同样的问题。
这个博客解决了我的问题。
问题似乎是 Cassini 中的身份序列化存在问题,但您可以通过从 MarshalByRefObject 派生类来解决它:
[Serializable]
public class MyUser : MarshalByRefObject, IIdentity
{
public int UserId ...
Run Code Online (Sandbox Code Playgroud)
当然,您不能从 GenericIdentity 继承,但您仍然可以实现 GenericIdentity 实现的 IIdentity 接口,因此您至少可以在大多数需要 IIdentity 的地方使用该东西。