在 MVC 中,这两个有什么区别?
它们看起来相同,甚至返回相同的类型/类System.Web.Security.RolePrincipal
,但有一些细微之处。
例如。以下代码在针对通过 ClaimsPrincipal.Current 生成的实例调用时会引发各种错误
cp.FindFirst(ClaimTypes.Name); //{"Unable to connect to SQL Server database."} <--HUH!?
cp.Claims; //{"Value cannot be null.\r\nParameter name: username"}
当 cp 是这样时,上述方法有效:
var cp = System.Web.HttpContext.Current.User
通过快速查看深入了解私人成员时,我可以看到他们都有相同的 Claim 字典。但是,无论出于何种原因,当针对由返回的对象调用时,公共属性都会爆炸ClaimsPrincipal.Current
帮助 - 这是为什么!?这真让我抓狂。
=============编辑===================
应该差不多该睡觉了。
IPrincipal 支持多种身份。它需要某种商店。IIdentity 返回一个 ClaimsIdentity 的实例并且不需要存储。
我只是钻了错误的属性。他们两个的形状几乎相同,即。相同的属性和方法,我让他们感到困惑。