2016-11-08 2 views
2

Je suis novice dans les services RESTful utilisant WebApi. J'ai une application Web frontale qui utilise FormsAuthentication pour authentifier les utilisateurs. Je suis capable d'utiliser la propriété User.Identity sans aucun problème dans mes méthodes de contrôleur MVC.Récupération du Principal dans une méthode WebApi RESTful

Cependant, je veux utiliser Angular pour faire des appels Ajax à partir du navigateur pour les méthodes Restful dans WebApi. Le problème se produit avec le principal utilisateur dans ces méthodes - HttpRequestMessage.GetUserIdentity() renvoie toujours null. En revanche, Thread.CurrentPrincipal dans ces méthodes renvoie correctement l'identité de l'utilisateur actuellement authentifié. Mon contrôleur WebApi est décoré avec l'attribut Authorize.

Qu'est-ce qui me manque c'est d'arrêter GetUserIdentity() de fonctionner? Voici mon contrôleur.

[Authorize] 
public class CategoryController : ApiController 
{ 
    public IEnumerable<ICategoryJson> Get(HttpRequestMessage request) 
    { 
     var user = request.GetUserPrincipal();     // returns null 
     var user1 = System.Threading.Thread.CurrentPrincipal; // returns authenticated user identity 

     return null; 
    } 
} 

Et voici mon appel Ajax.

$http.get("/api/Category", config).then(function (response) { 
    Array.prototype.push.apply(service.list, response.data); 
    service.listLoading = false; 
}); 
+1

à quel moment appelez-vous cette méthode dans votre API? HttpRequestMessage.GetUserIdentity() – Aram

+0

J'ai ajouté du code à ma question –

+0

La bonne façon d'obtenir est: user = this.User; La propriété utilisateur d'ApiController fournit le principal pour vous –

Répondre

0

Le contrôleur MVC hérite d'une classe de base différente, c'est pourquoi il fonctionne dans le contrôleur MVC et non dans l'API Web.

Dans Web API 2, vous pouvez utiliser RequestContext.Principal ou comme vous avez utilisé Thread.CurrentPrincipal dans votre action de contrôleur pour obtenir l'identité des utilisateurs.

Je ne pense pas que ce problème est lié à l'appel ajax ou angulaire. vous pouvez essayer d'appeler la même action du contrôleur MVC à partir du code angulaire et il doit toujours retourner l'identité de l'utilisateur.