Identité ASP.NET – HttpContext n’a pas de méthode d’extension pour GetOwinContext

J’ai téléchargé et exécuté avec succès l’exemple d’identité ASP.NET ici: https://github.com/rustd/AspnetIdentitySample

Je suis maintenant en train d’implémenter le framework ASP.NET Identity dans mon projet et j’ai rencontré un problème qui m’a rendu fou toute la journée …

GetOwinContext() n’existe pas comme méthode d’extension sur mon HttpContext

Je suis en train d’implémenter le cadre d’identité dans la bibliothèque de classes. J’ai installé toutes les dernières versions (pré-version) du framework Identity et tout – à part cela – fonctionne correctement.

J’ai essayé d’implémenter le même code que le même directement dans mon contrôleur et j’ai trouvé le même problème.

Je manque clairement une référence quelque part, même si je n’ai aucune idée de quoi ..! ..

Le bloc de code qui me tue est:

 private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } } 

J’ai ajouté des références à ce qui suit – essayé ces deux dans ma bibliothèque de classes et directement sur le contrôleur, aucun d’entre eux ne fonctionne pour moi …

 using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using Microsoft.Owin; using System.Web; 

… ça me pousse au mur … aucune idée?

METTRE À JOUR

J’ai vérifié les versions d’Identity & OWIN dans l’exemple et je me suis assuré d’avoir les mêmes versions dans ma solution.

Plus encore, si je recherche le navigateur d’objects sur l’exemple pour GetOwinContext je peux trouver la méthode, mais quand je le cherche dans ma solution, il est introuvable. Je dois avoir une bibliothèque obsolète, mais je peux ne le trouve pas!

ARGH!

Je l’ai trouvé … Je n’avais pas de paquet supplémentaire, appelé Microsoft.Owin.Host.SystemWeb

Une fois que j’ai cherché et installé cela, cela a fonctionné.

Maintenant, je ne suis pas sûr de tout rater, mais je n’ai trouvé aucune référence à une telle bibliothèque ou à un tel paquet lors de différents tutoriels. Il n’a pas non plus été installé quand j’ai installé tout ce framework d’identité… Je ne sais pas si c’était juste moi ..

EDIT Bien qu’il soit dans l’assembly Microsoft.Owin.Host.SystemWeb , il s’agit d’une méthode d’extension dans l’espace de noms System.Web , vous devez donc avoir la référence à la première et using cette dernière.

Je pense que vous devez référencer le HttpContext actuel si vous êtes en dehors du contrôleur. Les contrôleurs MVC ont une référence de base au contexte actuel. Cependant, en dehors de cela, vous devez déclarer explicitement que vous voulez le HttpContext actuel

 return HttpContext.Current.GetOwinContext().Authentication; 

En ce qui concerne son absence, un nouveau modèle de projet MVC 5 utilisant le code que vous IAuthenticationManager ci-dessus ( IAuthenticationManager ) utilise les instructions suivantes en haut du contrôleur de compte:

 using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using WebApplication2.Models; 

En commentant chacun d’eux, il semble que GetOwinContext() réalité partie de l’assembly System.Web.Mvc.

Après essais et erreurs en comparant les instructions d’utilisation de mon contrôleur et du contrôleur de modèle Asp.Net

 using System.Web; 

Résolu le problème pour moi. Vous devrez également append:

 using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; 

Pour utiliser la méthode GetUserManager.

Microsoft n’a pas trouvé le moyen de résoudre ce problème automatiquement avec un clic droit et de résoudre comme les autres instructions manquantes?

Dans mon cas, l’ajout de la redéfinition Microsoft.AspNet.WebApi.Owin via nuget a fait l’affaire.

Assurez-vous d’avoir installé le package nuget Microsoft.AspNet.Identity.Owin . Ajoutez System.Net.Http espace de noms System.Net.Http .

J’ai eu tous les paquets et les utilisations corrects, mais j’ai dû d’abord construire avant que GetOwinContext() puisse fonctionner.

Obtenir UserManager dans l’API

 return HttpContext.Current.GetOwinContext().GetUserManager(); 

où AppUserManager est la classe qui hérite de UserManager.

Juste en utilisant

HttpContext.Current.GetOwinContext ()

fait le tour dans mon cas.