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 monHttpContext
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.