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 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 en tant que méthode d'extension sur monHttpContext
J'implémente le cadre d'identité dans la bibliothèque de classes. J'ai installé la dernière version (version préliminaire) du framework Identity et tout fonctionne, mis à part cela.
J'ai essayé d'implémenter le même code que le même direct dans mon contrôleur et trouver le même problème.
Il manque clairement une référence quelque part, bien que je ne sache pas quoi…! ..
Le code-block 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 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;
... cela me conduit au mur .... une idée?
UPDATE
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 de l'exemple GetOwinContext
, je peux trouver la méthode. Toutefois, lorsque je la recherche dans ma solution, elle est introuvable. Il me faut une bibliothèque obsolète. , mais je ne le trouve pas!
ARGH!
Je l'ai trouvé ... Je n'ai pas eu de paquet supplémentaire, appelé Microsoft.Owin.Host.SystemWeb
Une fois que j'ai cherché et installé ceci, cela a fonctionné.
Maintenant - je ne suis pas sûr d'avoir tout oublié, mais nous n'avons trouvé AUCUNE référence à une telle bibliothèque ou package en parcourant différents tutoriels. Il n’a pas non plus été installé lorsque j’ai installé tout ce cadre Identity ... Je ne sais pas si c’était juste pour 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 être using
le dernier. .
Je crois 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 la version actuelle HttpContext
return HttpContext.Current.GetOwinContext().Authentication;
Pour ce qui est de 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:
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 apparaît que la GetOwinContext()
fait en fait partie de l'assembly System.Web.Mvc.
Après essais et erreurs, comparaison des instructions using de mon contrôleur et du contrôleur Asp.Net Template
using System.Web;
Résolu le problème pour moi. Vous allez également avoir besoin d'ajouter:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
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 manquantes?
Dans mon cas, l'ajout de Microsoft.AspNet.WebApi.Owin référence via nuget a fait l'affaire.
Assurez-vous que vous avez installé le package de nuget Microsoft.AspNet.Identity.Owin
. Ajoutez ensuite System.Net.Http
namespace.
Juste en utilisant
HttpContext.Current.GetOwinContext ()
a fait le tour dans mon cas.
Pour les développeurs obtenant cette erreur dans le projet API Web -
La méthode d'extension GetOwinContext est définie dans System.Web.Http.Owin
dll et un package supplémentaire sera nécessaire, à savoir Microsoft.Owin.Host.SystemWeb
. Ce paquet doit être installé dans votre projet à partir de nuget.
Lien vers le package : Commande d'installation du package OWIN -
Install-Package Microsoft.AspNet.WebApi.Owin
Lien vers le package System.web : Commande d'installation du package -
Install-Package Microsoft.Owin.Host.SystemWeb
Afin de résoudre cette erreur, vous devez trouver pourquoi cela se produit dans votre cas. Veuillez cocher les points ci-dessous dans votre code -
Vous devez avoir une référence à Microsoft.AspNet.Identity.Owin;
utiliser Microsoft.AspNet.Identity.Owin;
Définissez GetOwinContext()
Sous HttpContext.Current
comme ci-dessous -
return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
OR
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
Code complet où GetOwinContext () est utilisé -
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
Namespace ( que j'utilise dans un fichier de code où GetOwinContext () est utilisé
using AngularJSAuthentication.API.Entities;
using AngularJSAuthentication.API.Models;
using HomeCinema.Common;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security.DataProtection;
J'ai eu cette erreur en déplaçant mon code d'un projet à un autre.
J'avais tous les bons paquets et utilisations, mais je devais d'abord construire avant de pouvoir faire fonctionner GetOwinContext()
.
Pour obtenir UserManager dans l'API
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
où AppUserManager est la classe qui hérite de UserManager.