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 mon HttpContext

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!

319
demandé sur Peter Mortensen 2014-01-16 01:07:13

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.

619
répondu Darren 2015-07-16 21:39:00

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.

160
répondu Tommy 2014-01-15 21:20:29

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?

20
répondu Ronen Festinger 2017-11-23 16:55:58

dans mon cas ajoutant Microsoft.AspNet.WebApi.Owin refference via nuget a fait un tour.

14
répondu DolceVita 2015-12-01 11:59:45

assurez-vous que vous avez installé le paquet nuget Microsoft.AspNet.Identity.Owin . Puis Ajouter System.Net.Http namespace.

12
répondu CodeNotFound 2016-08-17 10:45:25

Juste à l'aide de

HttpContext.Actuel.GetOwinContext ()

a fait l'affaire dans mon cas.

4
répondu Honza P. 2018-05-11 12:25:40

j'avais tous les paquets et les utilisations corrects, mais j'ai dû construire d'abord avant de pouvoir faire fonctionner GetOwinContext() .

3
répondu Kevin Raffay 2018-03-16 16:35:15

pour obtenir UserManager dans API

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();

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

2
répondu Ashraf Maher 2017-05-09 12:57:37