Jeg har lastet ned og kjørt ASP.NET Identity-eksemplet herfra: https://github.com/rustd/AspnetIdentitySample
Jeg er nå i ferd med å implementere ASP.NET Identity-rammeverket i prosjektet mitt og har støtt på et problem som har drevet meg til vanvidd hele dagen...
GetOwinContext()
finnes ikke som en utvidelsesmetode på minHttpContext
.
Jeg implementerer identitetsrammeverket i klassebiblioteket. Jeg har installert alle de nyeste (pre-release versjon) av Identity rammeverket og alt - bortsett fra dette - fungerer fint.
Jeg har prøvd å implementere den samme koden som den samme direkte i kontrolleren min, og finner det samme problemet.
Jeg mangler tydeligvis en referanse et sted, selv om jeg ikke aner hva....
Kodeblokken som tar livet av meg er:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Jeg har lagt til referanser til følgende - prøvde disse både i klassebiblioteket mitt og direkte på kontrolleren, ingen av dem fungerer for meg...
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
... dette er å kjøre meg opp i veggen .... noen idé?
UPDATE
Jeg har sjekket versjonene av Identity & OWIN i prøven, og jeg har sørget for at jeg har de samme versjonene i min løsning.
Mer, hvis jeg søker i objektbrowseren på prøven etter GetOwinContext
finner jeg metoden, men når jeg søker etter den i min løsning er den ikke å finne noe sted ... Jeg må ha et bibliotek som er utdatert, men jeg finner det ikke!
ARGH!
Jeg fant det... Jeg hadde ikke en ekstra pakke, kalt Microsoft.Owin.Host.SystemWeb
.
Da jeg fant og installerte denne, fungerte det.
Nå - jeg er ikke sikker på om jeg bare gikk glipp av alt, men fant INGEN referanse til et slikt bibliotek eller pakke når jeg gikk gjennom forskjellige opplæringsprogrammer. Det ble heller ikke installert da jeg installerte alt dette Identity-rammeverket ... Ikke sikker på om det var bare meg ...
** REDIGERER
Selv om det er i Microsoft.Owin.Host.SystemWeb
assembly er det en utvidelsesmetode i System.Web
namespace, så du må ha referanse til førstnevnte, og bruke
sistnevnte.
Jeg tror du må referere til gjeldende HttpContext
hvis du er utenfor kontrolleren. MVC-kontrollerne har en basisreferanse til den aktuelle konteksten. Utenfor den må du imidlertid eksplisitt erklære at du vil ha den gjeldende HttpContext
.
return HttpContext.Current.GetOwinContext().Authentication;
Når det gjelder at den ikke vises, har en ny MVC 5-prosjektmal som bruker koden du viser ovenfor (IAuthenticationManager
) følgende using statements øverst i kontokontrolleren:
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;
Hvis du kommenterer ut hver av dem, ser det ut til at GetOwinContext()
faktisk er en del av System.Web.Mvc-samlingen.
Kontroller at du har installert nuget-pakken Microsoft.AspNet.Identity.Owin
. Deretter legger du til System.Net.Http
namespace.