418 Stimmen

ASP.NET Identity - HttpContext hat keine Erweiterungsmethode für GetOwinContext.

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

Ich bin jetzt mitten 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 macht...

GetOwinContext() existiert nicht als Erweiterungsmethode auf meinem HttpContext

Ich implementiere das Identitätsframework in einer Klassenbibliothek. Ich habe die neueste (Vorabversion) des Identitätsframeworks installiert und alles funktioniert - abgesehen davon - einwandfrei.

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

Offensichtlich fehlt mir irgendwo eine Referenz, aber ich habe keine Ahnung, wo..!..

Der Codeblock, der mich umbringt, lautet:

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

Ich habe Referenzen zu folgenden hinzugefügt - habe beide in meiner Klassenbibliothek und auch direkt im Controller versucht, aber keines davon funktioniert für mich...

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

... das bringt mich um den Verstand....irgendeine Idee?

UPDATE

Ich habe die Versionen von Identity & OWIN im Beispiel überprüft und sicher gestellt, dass ich die gleichen Versionen in meiner Lösung habe.

Mehr noch, wenn ich im Objektbrowser des Beispiels nach GetOwinContext suche, finde ich die Methode, aber wenn ich danach in meiner Lösung suche, ist sie nirgendwo zu finden... Ich muss irgendeine Bibliothek veraltet haben, aber ich kann sie nicht finden!

761voto

Darren Wainwright Punkte 30007

ARGH!

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

Als ich das gesucht und installiert habe, hat es funktioniert.

Jetzt - ich bin mir nicht sicher, ob ich einfach alles verpasst habe, obwohl ich beim Durchgehen verschiedener Tutorials KEINE Referenz zu einer solchen Bibliothek oder einem Paket gefunden habe. Es wurde auch nicht installiert, als ich dieses Identity-Framework installiert habe... Nicht sicher, ob es nur an mir lag..

BEARBEITEN Obwohl es in der Microsoft.Owin.Host.SystemWeb Assembly ist, ist es eine Erweiterungsmethode im System.Web Namespace, daher benötigen Sie eine Referenz auf Ersteres und müssen Letzteres verwenden.

185voto

Tommy Punkte 38742

Ich glaube, dass du die aktuelle HttpContext referenzieren musst, wenn du außerhalb des Controllers bist. Die MVC-Controller haben standardmäßig eine Referenz auf den aktuellen Kontext. Außerhalb davon musst du jedoch explizit angeben, dass du den aktuellen HttpContext haben möchtest.

return HttpContext.Current.GetOwinContext().Authentication;

Was das Nicht-Anzeigen betrifft, ein neues MVC 5 Projekttemplate mit dem oben gezeigten Code (dem IAuthenticationManager) hat die folgenden using-Anweisungen oben im Account Controller:

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;

Wenn jede davon auskommentiert wird, scheint es, dass GetOwinContext() tatsächlich ein Teil der System.Web.Mvc Assembly ist.

24voto

Ronen Festinger Punkte 2138

Nach dem Ausprobieren und Vergleichen der using-Anweisungen meines Controllers und des Asp.Net-Template-Controllers

using System.Web;

Hat das Problem für mich gelöst. Du musst auch hinzufügen:

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

Um die GetUserManager-Methode zu verwenden.

Hat Microsoft keinen Weg gefunden, um dies automatisch mit Rechtsklick und "Auflösen" wie andere fehlende using-Anweisungen zu beheben?

22voto

DolceVita Punkte 2080

In meinem Fall hat das Hinzufügen des Microsoft.AspNet.WebApi.Owin Verweises über NuGet funktioniert.

16voto

CodeNotFound Punkte 20794

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X