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 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!
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 .
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.
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?
In meinem Fall hat das Hinzufügen von Microsoft.AspNet.WebApi.Owin Referenz über Nuget den Trick getan.
Stellen Sie sicher, dass Sie das Nuget-Paket Microsoft.AspNet.Identity.Owin
installiert haben. Fügen Sie dann den Namespace System.Net.Http
hinzu.
Einfach mit
HttpContext.Current.GetOwinContext ()
tat den Trick in meinem Fall.
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 -
Sie müssen einen Verweis auf Microsoft.AspNet.Identity.Owin;
haben
using Microsoft.AspNet.Identity.Owin;
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.
Ich hatte alle richtigen Pakete und Verwendungen, musste aber erst bauen, bevor ich GetOwinContext()
zum Laufen bringen konnte.
m UserManager in API zu bekommen
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
dabei ist AppUserManager die Klasse, die von UserManager erbt.