Ik heb het ASP.NET Identity-voorbeeld gedownload en met succes uitgevoerd vanaf hier:
https://github.com/rustd/AspnetIdentitySample
Ik ben nu bezig met het implementeren van het ASP.NET Identity-framework in mijn project en ben een probleem tegengekomen dat me de hele dag gek heeft gemaakt…
GetOwinContext()
bestaat niet als extensiemethode op mijnHttpContext
Ik implementeer het identiteitsraamwerk in de klassenbibliotheek. Ik heb de nieuwste (pre-releaseversie) van het Identity-framework geïnstalleerd en alles – behalve dit – werkt prima.
Ik heb geprobeerd dezelfde code als dezelfde direct in mijn controller te implementeren en vind hetzelfde probleem.
Ik mis duidelijk ergens een referentie, hoewel ik geen idee heb wat..!..
Het codeblok dat me doodt is:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Ik heb verwijzingen naar het volgende toegevoegd – heb deze zowel in mijn klassenbibliotheek als ook rechtstreeks op de controller geprobeerd, geen van hen werkt voor mij…
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
… dit drijft me tegen de muur….enig idee?
UPDATE
Ik heb de versies van Identity & OWIN in het voorbeeld, en ik heb ervoor gezorgd dat ik dezelfde versies in mijn oplossing heb.
Meer nog, als ik in de objectbrowser in het voorbeeld zoek naar GetOwinContext
, kan ik de methode vinden, maar als ik ernaar zoek in mijn oplossing, is deze nergens te vinden… Ik moet heb een bibliotheek die verouderd is, maar ik kan hem niet vinden!
Antwoord 1, autoriteit 100%
ARGH!
Ik heb het gevonden… Ik had geen extra pakket, genaamd Microsoft.Owin.Host.SystemWeb
Toen ik dit eenmaal had gezocht en geïnstalleerd, werkte het.
Nu – ik weet niet zeker of ik gewoon alles heb gemist, hoewel ik GEEN verwijzing naar zo’n bibliotheek of pakket heb gevonden bij het doornemen van verschillende tutorials. Het werd ook niet geïnstalleerd toen ik dit hele identiteitsframework installeerde… Ik weet niet zeker of ik de enige was..
BEWERKEN
Hoewel het zich in de Microsoft.Owin.Host.SystemWeb
-assembly bevindt, is het een uitbreidingsmethode in de System.Web
-naamruimte, dus je moet de verwijzing naar de eerste hebben, en wees using
de laatste.
Antwoord 2, autoriteit 24%
Ik geloof dat je moet verwijzen naar de huidige HttpContext
als je buiten de controller bent. De MVC-controllers hebben een basisreferentie naar de huidige context. Buiten dat moet u echter expliciet aangeven dat u de huidige HttpContext
wilt
return HttpContext.Current.GetOwinContext().Authentication;
Wat betreft het niet verschijnen, een nieuwe MVC 5-projectsjabloon die de code gebruikt die u hierboven laat zien (de IAuthenticationManager
) heeft de volgende gebruiksaanwijzingen bovenaan de accountcontroller:
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;
Als we ze allemaal van commentaar voorzien, lijkt het erop dat GetOwinContext()
eigenlijk een onderdeel is van de System.Web.Mvc-assembly.
Antwoord 3, autoriteit 3%
Na proefondervindelijk vergelijken van de gebruiksverklaringen van mijn controller en de Asp.Net Template-controller
using System.Web;
Het probleem is voor mij opgelost.
Je moet ook toevoegen:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
Om de GetUserManager-methode te gebruiken.
Microsoft kon geen manier vinden om dit automatisch op te lossen door met de rechtermuisknop te klikken en op te lossen zoals andere ontbrekende gebruiksinstructies?
Antwoord 4, autoriteit 3%
In mijn geval was het toevoegen van een Microsoft.AspNet.WebApi.Owin-referentie via nuget voldoende.
Antwoord 5, autoriteit 2%
Zorg ervoor dat je het nuget-pakket Microsoft.AspNet.Identity.Owin
hebt geïnstalleerd. Voeg vervolgens System.Net.Http
naamruimte toe.
Antwoord 6, autoriteit 2%
Gewoon
. gebruiken
HttpContext.Current.GetOwinContext()
deed de truc in mijn geval.
Antwoord 7, autoriteit 2%
Voor ontwikkelaars die deze fout krijgen in Web API Project –
De GetOwinContext-extensiemethode is gedefinieerd in System.Web.Http.Owin
dll en er is nog een pakket nodig, namelijk Microsoft.Owin.Host.SystemWeb
. Dit pakket moet vanuit nuget in uw project worden geïnstalleerd.
Link naar pakket: OWIN-pakketinstallatieopdracht –
Install-Package Microsoft.AspNet.WebApi.Owin
Link naar System.web-pakket: opdracht voor pakketinstallatie –
Install-Package Microsoft.Owin.Host.SystemWeb
Om deze fout op te lossen, moet u erachter komen waarom deze in uw geval optreedt. Kruis de onderstaande punten in uw code aan –
-
U moet een verwijzing hebben naar
Microsoft.AspNet.Identity.Owin;
met behulp van Microsoft.AspNet.Identity.Owin;
-
Definieer
GetOwinContext()
onderHttpContext.Current
zoals hieronder –return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
OF
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
Volledige code waar GetOwinContext() wordt gebruikt –
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
Namespace’sdie ik gebruik in codebestand waar GetOwinContext() wordt gebruikt
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;
Ik kreeg deze fout tijdens het verplaatsen van mijn code van het ene project naar het andere.
Antwoord 8
UserManager in API krijgen
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
waarbij AppUserManager de klasse is die erft van UserManager.
Antwoord 9
Ik had alle juiste pakketten en toepassingen, maar moest eerst bouwen voordat ik GetOwinContext()
aan het werk kon krijgen.
Antwoord 10
Installeer dit pakket en uw code zal werken:=>
Installatiepakket Microsoft.Owin.Host.SystemWeb -Versie 2.1.0