2016-08-24 56 views
3

要求我做到了像我RC1項目:如何獲得內部Asp.Net核心Razor視圖

User.Claims.ElementAt(#).Value 

但經過我切換到RTM將不再工作。當我調試Razor視圖時,該對象看起來相同,但User.Claims只是空的。任何想法可能是什麼原因。

+0

我發現這個問題。我在設置cookie的行中存在拼寫錯誤:HttpContext.Authentication.SignInAsync(「typo here」,new ClaimsPrincipal(auth));.對不必要的工作人員抱歉。 – Sknecht

+0

只是一個建議,它可能是一個壞主意,索引索引索引..可能要使用索賠類型,如在JDupont的答案。 – juunas

+1

你說得對,一旦我們從系統中刪除了一項索賠,它就已經導致出界。這已經是董事會的一項任務,但並沒有圍繞這個任務展開。 – Sknecht

回答

7

假設您對當前的委託人附有索賠。在您的剃刀視圖中:

@((ClaimsIdentity) User.Identity) 

這會讓您訪問當前用戶的ClaimsIdentity。爲了讓您的索賠保持乾淨,您可能需要創建搜索索賠的擴展方法。

public static string GetSpecificClaim(this ClaimsIdentity claimsIdentity, string claimType) 
{ 
    var claim = claimsIdentity.Claims.FirstOrDefault(x => x.Type == claimType); 

    return (claim != null) ? claim.Value : string.Empty; 
} 

然後,你可以訪問你想要的任何索賠:

@((ClaimsIdentity) User.Identity).GetSpecificClaim("someclaimtype") 

希望這有助於。

在Razor視圖聲明身份快速搜索想出了一個類似的問題和答案: MVC 5 Access Claims Identity User Data