it-swarm.com.de

ASP.NET-Identität - HttpContext hat keine Erweiterungsmethode für GetOwinContext

Ich habe das ASP.NET-Identitätsbeispiel von hier heruntergeladen und erfolgreich ausgeführt: https://github.com/rustd/AspnetIdentitySample

Ich bin gerade dabei, das ASP.NET Identity Framework in meinem Projekt zu implementieren, und bin auf ein Problem gestoßen, das mich den ganzen Tag verrückt gemacht hat ...

GetOwinContext() existiert nicht als Erweiterungsmethode auf meinem HttpContext

Ich implementiere das Identity Framework in der Klassenbibliothek. Ich habe die neueste Version (Vorabversion) des Identity-Frameworks installiert und ansonsten funktioniert alles einwandfrei.

Ich habe versucht, den gleichen Code wie den gleichen Code direkt in meinem Controller zu implementieren und habe das gleiche Problem festgestellt.

Mir fehlt eindeutig irgendwo eine Referenz, obwohl ich keine Ahnung habe, was ..! ..

Der Code-Block, der mich umbringt, ist:

private IAuthenticationManager AuthenticationManager
{
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}

Ich habe Verweise auf Folgendes hinzugefügt - habe diese sowohl in meiner Klassenbibliothek als auch direkt auf dem Controller ausprobiert, keiner von ihnen funktioniert für mich ...

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;

... das treibt mich die Wand hoch ... irgendeine Idee?

UPDATE

Ich habe die Versionen von Identity & OWIN im Beispiel überprüft und sichergestellt, dass meine Lösung dieselben Versionen enthält.

Wenn ich den Objektbrowser im Beispiel nach GetOwinContext durchsuche, kann ich die Methode zwar finden, aber wenn ich in meiner Lösung danach suche, ist sie nirgends zu finden ... Ich muss über eine veraltete Bibliothek verfügen , aber ich kann es nicht finden!

359

ARGH!

Ich habe es gefunden ... Ich hatte kein zusätzliches Paket namens Microsoft.Owin.Host.SystemWeb

Nachdem ich das gesucht und installiert hatte, funktionierte es.

Nun - ich bin mir nicht sicher, ob ich gerade alles verpasst habe, obwohl ich KEINEN Hinweis auf eine solche Bibliothek oder ein solches Paket gefunden habe, als ich verschiedene Tutorials durchgesehen habe. Es wurde auch nicht installiert, als ich das gesamte Identity Framework installiert habe ... Ich bin mir nicht sicher, ob es nur ich selbst war.

EDIT Obwohl es sich in der Microsoft.Owin.Host.SystemWeb Assembly um eine Erweiterungsmethode im System.Web Namespace handelt, müssen Sie den Verweis auf die erstere haben und using die letztere sein .

674

Ich glaube, Sie müssen den aktuellen HttpContext referenzieren, wenn Sie sich außerhalb des Controllers befinden. Die MVC-Controller haben eine Basisreferenz zum aktuellen Kontext. Abgesehen davon müssen Sie jedoch ausdrücklich erklären, dass Sie das aktuelle HttpContext möchten.

return HttpContext.Current.GetOwinContext().Authentication;

Eine neue MVC 5-Projektvorlage mit dem oben angezeigten Code (IAuthenticationManager) enthält die folgenden using-Anweisungen am oberen Rand des Kontocontrollers:

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;

Auskommentiert man jeden einzelnen, so scheint es, dass GetOwinContext() tatsächlich ein Teil der System.Web.Mvc-Assembly ist.

171
Tommy

Nach Versuch und Irrtum vergleichen Sie die using-Anweisungen meines Controllers und des Asp.Net Template-Controllers

using System.Web;

Löste das Problem für mich. Sie müssen außerdem Folgendes hinzufügen:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;

So verwenden Sie die GetUserManager-Methode.

Microsoft konnte keine Möglichkeit finden, dies automatisch mit einem Rechtsklick zu beheben und wie andere fehlende using-Anweisungen zu beheben?

21
Ronen Festinger

In meinem Fall hat das Hinzufügen von Microsoft.AspNet.WebApi.Owin Referenz über Nuget den Trick getan.

18
DolceVita

Stellen Sie sicher, dass Sie das Nuget-Paket Microsoft.AspNet.Identity.Owin installiert haben. Fügen Sie dann den Namespace System.Net.Http hinzu.

14
CodeNotFound

Einfach mit

HttpContext.Current.GetOwinContext ()

tat den Trick in meinem Fall.

8
Honza P.

Für Entwickler, die diesen Fehler im Web-API-Projekt erhalten -

Die GetOwinContext-Erweiterungsmethode ist in der System.Web.Http.Owin -Dll definiert, und es wird ein weiteres Paket benötigt, d. H. Microsoft.Owin.Host.SystemWeb. Dieses Paket muss in Ihrem Projekt von Nuget installiert werden.

Link zum Paket : Befehl zum Installieren des OWIN-Pakets -

Install-Package Microsoft.AspNet.WebApi.Owin    

Link zu System.web-Paket : Paketinstallationsbefehl -

Install-Package Microsoft.Owin.Host.SystemWeb

Um diesen Fehler zu beheben, müssen Sie herausfinden, warum er in Ihrem Fall auftritt. Bitte überprüfen Sie die folgenden Punkte in Ihrem Code -

  1. Sie müssen einen Verweis auf Microsoft.AspNet.Identity.Owin; haben

    using Microsoft.AspNet.Identity.Owin;

  2. Definiere GetOwinContext() unter HttpContext.Current wie folgt -

     return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
    

    OR

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
    

Vollständiger Code bei Verwendung von GetOwinContext () -

 public ApplicationSignInManager SignInManager
 {
   get
   {
    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
   }
    private set
    {
     _signInManager = value;
    }
  }

Namespaces , die ich in einer Codedatei verwende, in der GetOwinContext () verwendet wird

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;

Ich habe diesen Fehler erhalten, als ich meinen Code von einem Projekt in ein anderes verschoben habe.

5

Ich hatte alle richtigen Pakete und Verwendungen, musste aber erst bauen, bevor ich GetOwinContext() zum Laufen bringen konnte.

3
Kevin Raffay

m UserManager in API zu bekommen

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

dabei ist AppUserManager die Klasse, die von UserManager erbt.

3
Ashraf Maher