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!

16voto

Honza P. Punkte 1055

Einfach nur verwenden

HttpContext.Current.GetOwinContext()

hat in meinem Fall funktioniert.

14voto

Heemanshu Bhalla Punkte 3362

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: OWIN-Paketinstallationsbefehl -

Install-Package Microsoft.AspNet.WebApi.Owin    

Link zum System.web-Paket: Installationsbefehl für Paket -

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. Definieren Sie GetOwinContext() unter HttpContext.Current wie folgt -

     return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager();

    ODER

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get();

Vollständiger Code, in dem GetOwinContext() verwendet wird -

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

Namespace, die ich in der Code-Datei 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.

5voto

Ashraf Maher Punkte 81

Um UserManager in der API zu erhalten

return HttpContext.Current.GetOwinContext().GetUserManager();

wo AppUserManager die Klasse ist, die von UserManager erbt.

5voto

Muhammad Ayyaz Punkte 31

Einfach dieses Paket installieren und dein Code wird funktionieren:=> Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0

4voto

Kevin Raffay Punkte 833

Ich hatte alle richtigen Pakete und Verwendungen, aber ich musste zuerst bauen, bevor GetOwinContext() funktionieren könnte.

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