11

在 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 的实例并且不需要存储。

我只是钻了错误的属性。他们两个的形状几乎相同,即。相同的属性和方法,我让他们感到困惑。

4

1 回答 1

9

身份是当前经过身份验证的用户,主体是代码运行的安全上下文。

这篇文章是一个很好的解释,我发现它很有用http://msdn.microsoft.com/en-us/library/ftx85f8x.aspx

于 2013-10-29T08:57:19.277 回答