ASP.NET Identity-HttpContext n'a pas de méthode d'extension pour GetOwinContext
j'ai téléchargé, et exécuté avec succès le ASP.NET échantillon D'identité ici: https://github.com/rustd/AspnetIdentitySample
je suis maintenant au milieu de la mise en œuvre de la ASP.NET le cadre D'identité dans mon projet et ont rencontré un problème, qui m'a conduit fou toute la journée...
GetOwinContext()
n'existe pas comme une méthode d'extension sur monHttpContext
J'implémente le cadre d'identité dans la bibliothèque de classe. J'ai installé toute la dernière (version pré-publication) du cadre D'identité et tout - à part cela - fonctionne très bien.
j'ai essayé d'implémenter le même code que le même direct dans mon contrôleur, et j'ai trouvé le même problème.
je suis clairement en train de manquer une référence quelque part, bien que je n'ai aucune idée de quoi..!..
le code-bloc 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 à la fois dans ma bibliothèque de classe et aussi direct sur le contrôleur, aucun d'eux ne travaille pour moi...
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
... cela me conduit dans le mur....une idée?
mise à JOUR
j'ai vérifié les versions D'Identity & OWIN dans l'échantillon, et je me suis assuré d'avoir les mêmes versions dans ma solution.
plus, si je cherche le navigateur d'objet sur l'échantillon pour GetOwinContext
je peux trouver la méthode, cependant quand je la recherche dans ma solution, il est nulle part être trouvé... Je dois avoir une bibliothèque périmée, mais je ne la trouve pas!
8 réponses
ARGH!
Je l'ai trouvé ... Je n'avais pas de colis supplémentaire, appelé Microsoft.Owin.Host.SystemWeb
une fois que j'ai cherché et installé ceci, ça a marché.
maintenant - je ne suis pas sûr si je viens de tout manquer, mais n'a trouvé aucune référence à une telle bibliothèque ou un paquet en passant par divers tutoriels. Il n'a pas non plus été installé lorsque j'ai installé tout ce cadre D'identité... Pas sûr si c'était juste moi..
EDIT
Bien que ce soit dans l'assemblage Microsoft.Owin.Host.SystemWeb
, c'est une méthode d'extension dans l'espace de noms System.Web
, donc vous devez avoir la référence à la première, et être using
la seconde.
je crois que vous devez faire référence à l'actuel HttpContext
si vous êtes à l'extérieur 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 l'actuel 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
) dispose de ce qui suit en utilisant des instructions 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;
commentant chacune, il semble que le GetOwinContext()
soit en fait une partie du système.Web.Montage Mvc.
après essai et erreur comparant les déclarations d'utilisation de mon contrôleur et le Asp.Net template controller
using System.Web;
a 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 ne pouvait pas trouver un moyen de résoudre ce problème automatiquement avec le clic droit et résoudre comme d'autres manquants en utilisant des déclarations?
dans mon cas ajoutant Microsoft.AspNet.WebApi.Owin refference via nuget a fait un tour.
assurez-vous que vous avez installé le paquet nuget Microsoft.AspNet.Identity.Owin
. Puis Ajouter System.Net.Http
namespace.
Juste à l'aide de
HttpContext.Actuel.GetOwinContext ()
a fait l'affaire dans mon cas.
j'avais tous les paquets et les utilisations corrects, mais j'ai dû construire d'abord avant de pouvoir faire fonctionner GetOwinContext()
.
pour obtenir UserManager dans API
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
où AppUserManager est la classe qui hérite de UserManager.