Asp.net-Mvc

ClaimsPrincipal.Current 與 HttpContext.Current.User?

  • October 29, 2013

在 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 的實例並且不需要儲存。

我只是鑽了錯誤的屬性。他們兩個的形狀幾乎相同,即。相同的屬性和方法,我讓他們感到困惑。

身份是目前經過身份驗證的使用者,主體是程式碼執行的安全上下文。

這篇文章是一個很好的解釋,我發現它很有用http://msdn.microsoft.com/en-us/library/ftx85f8x.aspx

引用自:https://stackoverflow.com/questions/19652221