web-dev-qa-db-fra.com

Comment obtenir une réclamation dans Asp.Net Core Razor View

Je l'ai fait dans mon projet rc1 comme:

User.Claims.ElementAt(#).Value

Mais après être passé à rtm, cela ne fonctionnerait plus. Lorsque je débogue la vue Razor, l'objet a la même apparence mais User.Claims est juste vide. Aucune idée de la raison.

16
Sknecht

En supposant que vous ayez des réclamations attachées au principal actuel. Dans votre vue Razor:

@((ClaimsIdentity) User.Identity)

Cela vous donnera accès à la ClaimsIdentity de l'utilisateur actuel. Dans le but de maintenir la propreté de vos revendications, vous pouvez créer une méthode d'extension pour rechercher des revendications.

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;
}

Ensuite, vous pouvez simplement accéder à la réclamation que vous souhaitez avec:

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

J'espère que cela t'aides.

La recherche rapide de l'identité des revendications dans la vue du rasoir a abouti à une question et une réponse similaires: MVC 5 Access Claims Identity User Data

22
JDupont

Dans Core 3.0, utilisez l'autorisation de vue

Startup.cs

    services.AddAuthorization(options =>
    {
        options.AddPolicy("Claim_Name", x => x.RequireClaim("Claim_Name"));
    });

Puis à l'intérieur de l'interface utilisateur

    if ((AuthorizationService.AuthorizeAsync(User, "Claim_Name")).Result.Succeeded){
        //show ui element
    }

Autorisation basée sur la vue dans ASP.NET Core MVC

0
Jeff Li