Pobrałem i pomyślnie uruchomiłem przykładową tożsamość ASP.NET tutaj: https://github.com/rustd/AspnetIdentitySample
Jestem teraz w trakcie wdrażania platformy ASP.NET Identity w moim projekcie i napotkałem problem, który doprowadzał mnie do szaleństwa przez cały dzień ...
GetOwinContext()
nie istnieje jako metoda rozszerzenia na moimHttpContext
Implementuję strukturę tożsamości w bibliotece klas. Zainstalowałem wszystkie najnowsze (przedpremierowe) środowisko tożsamości i wszystko - oprócz tego - działa dobrze.
Próbowałem zaimplementować ten sam kod co ten sam kod bezpośredni w moim kontrolerze i znalazłem ten sam problem.
Wyraźnie brakuje mi gdzieś referencji, choć nie mam pojęcia, co ...! ..
Blok kodu, który mnie zabija to:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Dodałem odniesienia do następujących - wypróbowałem je zarówno w mojej bibliotece klas, jak i bezpośrednio na kontrolerze, żadne z nich nie działa dla mnie ...
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
... to doprowadza mnie do szału ... jakiś pomysł?
AKTUALIZACJA
Sprawdziłem wersje Identity & OWIN w próbce i upewniłem się, że mam takie same wersje w swoim rozwiązaniu.
Co więcej, jeśli przeszukuję przeglądarkę obiektów na próbce GetOwinContext
, mogę znaleźć metodę, jednak kiedy szukam jej w moim rozwiązaniu, nigdzie jej nie ma ... Muszę mieć bibliotekę nieaktualną, ale mogę ' znajdź to!
źródło
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
(Obecne uwzględnione tam, gdzie nie było go w pytaniu).Uważam, że musisz odwołać się do prądu,
HttpContext
jeśli jesteś poza kontrolerem. Kontrolery MVC mają podstawowe odniesienie do bieżącego kontekstu. Jednak poza tym musisz jawnie zadeklarować, że chcesz prąduHttpContext
Jeśli chodzi o to, że się nie wyświetla, nowy szablon projektu MVC 5 wykorzystujący kod pokazany powyżej (
IAuthenticationManager
) zawiera następujące instrukcje za pomocą instrukcji u góry kontrolera konta:Komentując każdy z nich, wygląda na
GetOwinContext()
to, że jest on faktycznie częścią zestawu System.Web.Mvc.źródło
System.Web.Mvc
się do projektu klasowego. Po skomentowaniu stałoHttpContext.GetOwinContext()
się to nieznane (a nieMicrosoft.Owin.Security
zgromadzenie)HttpContext
wController
klasie, więc jeśli dziedziczą, żeHttpContext.GetOwinContext()
działa zgodnie z oczekiwaniami. Jeśli jednak odziedziczysz po nimApiController
, nie ma takiej właściwości. DlategoHttpContext
będzie odnosił się do klasy, która będzie wymagać użyciaCurrent
dostępu do instancji klasy. Więc jeśli skopiujesz / wkleisz kod z kontrolera do ApiController i zastanawiasz się, dlaczego to nie działa, to jest odpowiedź dla ciebie.Po próbach i błędach porównania instrukcji używania mojego kontrolera i kontrolera szablonu Asp.Net
Rozwiązałem problem dla mnie. Będziesz także musiał dodać:
Aby użyć metody GetUserManager.
Microsoft nie mógł znaleźć sposobu, aby rozwiązać to automatycznie za pomocą kliknięcia prawym przyciskiem myszy i rozwiązać tak, jak inne brakujące instrukcje?
źródło
W moim przypadku załatwienie problemu za pomocą nuget polegało na dodaniu referencji Microsoft.AspNet.WebApi.Owin .
źródło
Upewnij się, że zainstalowałeś pakiet nuget
Microsoft.AspNet.Identity.Owin
. Następnie dodajSystem.Net.Http
przestrzeń nazw.źródło
Microsoft.Owin.Host.SystemWeb
załatwiła sprawę.Po prostu używam
zrobiłem lewę w moim przypadku.
źródło
Dla deweloperów otrzymujących ten błąd w Web API Project -
Metoda rozszerzenia GetOwinContext jest zdefiniowana w
System.Web.Http.Owin
dll i potrzebny będzie jeszcze jeden pakiet, tjMicrosoft.Owin.Host.SystemWeb
. Ten pakiet musi być zainstalowany w twoim projekcie z nuget.Link do pakietu : Polecenie instalacji pakietu OWIN -
Link do pakietu System.web : Polecenie instalacji pakietu -
Aby rozwiązać ten błąd, musisz dowiedzieć się, dlaczego występuje on w twoim przypadku. Sprawdź krzyżowo poniższe punkty w kodzie -
Musisz mieć odniesienie do
Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity.Owin;
Zdefiniuj
GetOwinContext()
poniżej,HttpContext.Current
jak poniżej -LUB
Kompletny kod, w którym używany jest GetOwinContext () -
Przestrzeń nazw używam w pliku kodu, w którym używana jest funkcja GetOwinContext ()
Wystąpił ten błąd podczas przenoszenia kodu z jednego projektu do drugiego.
źródło
Aby uzyskać UserManager w API
gdzie AppUserManager jest klasą dziedziczącą po UserManager.
źródło
Miałem wszystkie prawidłowe pakiety i użytkowanie, ale najpierw musiałem je zbudować, zanim zacznę
GetOwinContext()
pracować.źródło
Wystarczy zainstalować ten pakiet, a kod będzie działał: => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
źródło