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 meinemHttpContext
Ich implementiere das Identitätsframework in der Klassenbibliothek. Ich habe die neueste Version (Vorabversion) des Identity-Frameworks installiert und alles - abgesehen davon - funktioniert einwandfrei.
Ich habe versucht, denselben Code wie denselben Direct in meinem Controller zu implementieren, und finde dasselbe Problem.
Ich vermisse eindeutig irgendwo eine Referenz, obwohl ich keine Ahnung habe, was ..! ..
Der Codeblock, 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?
AKTUALISIEREN
Ich habe die Versionen von Identity & OWIN im Beispiel überprüft und sichergestellt, dass meine Lösung dieselben Versionen enthält.
Mehr noch, wenn ich den Objektbrowser im Beispiel nach suche, GetOwinContext
kann ich die Methode finden, aber wenn ich in meiner Lösung danach suche, ist sie nirgends zu finden ... Ich muss eine Bibliothek veraltet haben, aber ich kann ' finde es nicht!
quelle
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
(Aktuell enthalten, wo sie nicht in der Frage enthalten war).Ich glaube, Sie müssen den Strom referenzieren,
HttpContext
wenn Sie sich außerhalb des Controllers befinden. Die MVC-Controller haben einen Basisverweis auf den aktuellen Kontext. Darüber hinaus müssen Sie jedoch explizit angeben, dass Sie den aktuellen Wert möchtenHttpContext
Da eine neue MVC 5-Projektvorlage mit dem oben angezeigten Code nicht angezeigt wird,
IAuthenticationManager
enthält sie die folgenden using-Anweisungen oben im Account Controller:Wenn Sie jedes einzelne auskommentieren, scheint es, dass es
GetOwinContext()
tatsächlich Teil der System.Web.Mvc-Assembly ist.quelle
System.Web.Mvc
aus Ihrem Klassenprojekt referenzieren . Wenn auskommentiert, ist es das,HttpContext.GetOwinContext()
was unbekannt geworden ist (und nicht dieMicrosoft.Owin.Security
Versammlung)HttpContext
DieController
Klasse verfügt über eine öffentliche Eigenschaft. Wenn Sie also davon erben,HttpContext.GetOwinContext()
funktioniert dies wie erwartet. Wenn Sie jedoch erbenApiController
, gibt es keine solche Eigenschaft. Verweist daherHttpContext
auf die Klasse, für die Sie aufCurrent
eine Instanz der Klasse zugreifen müssen. Wenn Sie also Code von einem Controller in einen ApiController kopieren / einfügen und sich fragen, warum er nicht funktioniert, ist dies die Antwort für Sie.Nach Versuch und Irrtum werden die using-Anweisungen meines Controllers und des Asp.Net Template-Controllers verglichen
Das Problem wurde für mich gelöst. Sie müssen außerdem Folgendes hinzufügen:
So verwenden Sie die GetUserManager-Methode
Microsoft konnte keine Möglichkeit finden, dies automatisch mit einem Rechtsklick zu beheben und wie andere fehlende Anweisungen zu beheben?
quelle
In meinem Fall hat das Hinzufügen der Microsoft.AspNet.WebApi.Owin- Referenz über Nuget den Trick getan.
quelle
Stellen Sie sicher, dass Sie das Nuget-Paket installiert haben
Microsoft.AspNet.Identity.Owin
. Fügen Sie dann denSystem.Net.Http
Namespace hinzu.quelle
Microsoft.Owin.Host.SystemWeb
jedoch geschafft.Nur mit
habe den Trick in meinem Fall gemacht.
quelle
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, dMicrosoft.Owin.Host.SystemWeb
. H. Dieses Paket muss von nuget in Ihrem Projekt installiert werden.Link zum Paket : OWIN Package Install Command -
Link zum System.web-Paket : Paketinstallationsbefehl -
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 -
Sie müssen einen Verweis auf haben
Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity.Owin;
Definieren Sie
GetOwinContext()
unterHttpContext.Current
wie folgt -ODER
Vollständiger Code Wo GetOwinContext () verwendet wird -
Ich verwende Namespace in einer Codedatei, in der GetOwinContext () verwendet wird
Ich habe diesen Fehler beim Verschieben meines Codes von einem Projekt in ein anderes erhalten.
quelle
So rufen Sie UserManager in der API ab
Dabei ist AppUserManager die Klasse, die von UserManager erbt.
quelle
Ich hatte alle richtigen Pakete und Verwendungen, musste aber erst bauen, bevor ich
GetOwinContext()
zur Arbeit gehen konnte.quelle
Installieren Sie einfach dieses Paket und Ihr Code funktioniert: => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
quelle