J'ai téléchargé et exécuté avec succès l'exemple d'identité ASP.NET à partir d'ici: https://github.com/rustd/AspnetIdentitySample
Je suis maintenant en train d'implémenter le framework d'identité ASP.NET 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
J'implémente le cadre d'identité dans la bibliothèque de classes. J'ai installé toutes les dernières (version préliminaire) du framework Identity et tout - à part cela - fonctionne bien.
J'ai essayé d'implémenter le même code que le même direct dans mon contrôleur et je trouve le même problème.
Il me manque clairement une référence quelque part, bien que je ne sache pas quoi ..! ..
Le bloc de code qui me tue est:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
J'ai ajouté des références aux éléments suivants - j'ai essayé ces deux dans ma bibliothèque de classe et aussi 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 fait monter le mur .... une idée?
MISE À 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 dans l'explorateur d'objets sur l'échantillon, GetOwinContext
je peux trouver la méthode, mais quand je la recherche dans ma solution, elle est introuvable ... Je dois avoir une bibliothèque obsolète, mais je peux ' t le trouver!
la source
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
(actuel inclus là où il n'était pas là dans la question).Je pense que vous devez référencer le courant
HttpContext
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 que le courantHttpContext
Quant à ne pas apparaître, un nouveau modèle de projet MVC 5 utilisant le code que vous montrez ci-dessus (le
IAuthenticationManager
) a les instructions using suivantes en haut du contrôleur de compte:Commentant chacun d'eux, il semble que ce
GetOwinContext()
soit en fait une partie de l'assembly System.Web.Mvc.la source
System.Web.Mvc
à votre projet de classe. Quand cela est commenté, c'est ce qui a renduHttpContext.GetOwinContext()
inconnu (et non l'Microsoft.Owin.Security
assemblée)HttpContext
sur laController
classe, donc si vous en héritez,HttpContext.GetOwinContext()
fonctionne comme prévu. Si vous héritez deApiController
cependant, il n'y a pas une telle propriété. Par conséquent,HttpContext
fera référence à la classe, qui vous obligera à utiliserCurrent
pour accéder à une instance de la classe. Donc, si vous copiez / collez du code d'un contrôleur vers un ApiController et que vous vous demandez pourquoi cela ne fonctionne pas, c'est la réponse pour vous.Après essai et erreur en comparant les instructions using de mon contrôleur et le contrôleur de modèle Asp.Net
Résolu le problème pour moi. Vous devrez également ajouter:
Pour utiliser la méthode GetUserManager.
Microsoft n'a pas pu trouver un moyen de résoudre ce problème automatiquement avec un clic droit et de le résoudre comme les autres instructions utilisant manquantes?
la source
Dans mon cas, l'ajout de la référence Microsoft.AspNet.WebApi.Owin via nuget a fait l'affaire.
la source
Assurez-vous d'avoir installé le package nuget
Microsoft.AspNet.Identity.Owin
. Ajoutez ensuite unSystem.Net.Http
espace de noms.la source
Microsoft.Owin.Host.SystemWeb
fait l'affaire.Juste en utilisant
a fait l'affaire dans mon cas.
la source
Pour les développeurs obtenant cette erreur dans Web API Project -
La méthode d'extension GetOwinContext est définie dans
System.Web.Http.Owin
dll et un package supplémentaire sera nécessaire, c'est-à-direMicrosoft.Owin.Host.SystemWeb
. Ce package doit être installé dans votre projet à partir de nuget.Lien vers le package : commande d'installation du package OWIN -
Lien vers le package System.web : commande d'installation du package -
Afin de résoudre cette erreur, vous devez trouver pourquoi elle se produit dans votre cas. Veuillez recouper les points ci-dessous dans votre code -
Vous devez avoir une référence à
Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity.Owin;
Définissez
GetOwinContext()
UnderHttpContext.Current
comme ci-dessous -OU
Code complet où GetOwinContext () est utilisé -
L'espace de noms que j'utilise dans le fichier de code où GetOwinContext () est utilisé
J'ai eu cette erreur en déplaçant mon code d'un projet à un autre.
la source
Pour obtenir UserManager dans l'API
où AppUserManager est la classe qui hérite de UserManager.
la source
J'avais tous les packages et utilisations corrects, mais je devais d'abord construire avant de pouvoir
GetOwinContext()
travailler.la source
Installez simplement ce package et votre code fonctionnera: => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
la source