web-dev-qa-db-fra.com

Identité ASP.NET - HttpContext n'a pas de méthode d'extension pour GetOwinContext

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

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!

359
Darren Wainwright

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

674
Darren Wainwright

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.

171
Tommy

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?

21
Ronen Festinger

Dans mon cas, l'ajout de Microsoft.AspNet.WebApi.Owin référence via nuget a fait l'affaire.

18
DolceVita

Assurez-vous que vous avez installé le package de nuget Microsoft.AspNet.Identity.Owin. Ajoutez ensuite System.Net.Http namespace.

14
CodeNotFound

Juste en utilisant

HttpContext.Current.GetOwinContext ()

a fait le tour dans mon cas.

8
Honza P.

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 -

  1. Vous devez avoir une référence à Microsoft.AspNet.Identity.Owin;

    utiliser Microsoft.AspNet.Identity.Owin;

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

5
Heemanshu Bhalla

J'avais tous les bons paquets et utilisations, mais je devais d'abord construire avant de pouvoir faire fonctionner GetOwinContext().

3
Kevin Raffay

Pour obtenir UserManager dans l'API

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

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

3
Ashraf Maher