У меня есть базовое бета-приложение MVC 2, в котором я пытаюсь реализовать собственные классы Identity и Principal.
Я создал свои классы, реализующие интерфейсы IIdentity и IPrincipal, создал их экземпляры, а затем назначил объект CustomPrincipal моему Context.User в Application_AuthenticateRequest файла Global.asax.
Все это удается, и объекты выглядят хорошо. Когда я начинаю отображать представления, страницы теперь не работают. Первая ошибка возникает в представлении LogoOnUserControl по умолчанию в следующей строке кода:
[ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
Если я вытащу это, это приведет к ошибке в другой строке кода «Html.ActionLink».
Я получаю следующее сообщение об ошибке:
Исключение типа System.Runtime.Serialization.SerializationException произошло в WebDev.WebHost40.dll, но не было обработано в пользовательском коде.
Дополнительная информация: тип не разрешен для элемента Model.Entities.UserIdentity, Model, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null.
Есть ли какие-то дополнительные свойства, которые мне нужно реализовать в моем удостоверении, чтобы использовать настраиваемое удостоверение в MVC? Я попытался реализовать [Serializable ()] в классе Identity, но это не помогло.
ОБНОВЛЕНИЕ. Я пробовал 3–4 альтернативных способа реализовать это, но все равно не с той же ошибкой. Если я использую классы GenericIdentity / GenericPrincipal напрямую, это не вызывает ошибки.
GenericIdentity ident = new GenericIdentity("jzxcvcx");
GenericPrincipal princ = new GenericPrincipal(ident, null);
Context.User = princ;
Но это ни к чему не приводит, поскольку я пытаюсь использовать CustomIdentity для хранения нескольких свойств. Если я реализую интерфейсы IIdentity / IPrincipal или унаследую GenericIdentity / GenericPrincipal для своего CustomIdentity / CustomPrincipal, произойдет сбой с исходной ошибкой, указанной выше.