ASP.NET Identity – HttpContext heeft geen extensiemethode voor GetOwinContext

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 mijn HttpContext

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 usingde laatste.


Antwoord 2, autoriteit 24%

Ik geloof dat je moet verwijzen naar de huidige HttpContextals 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.Owinhebt geïnstalleerd. Voeg vervolgens System.Net.Httpnaamruimte 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.Owindll 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 –

  1. U moet een verwijzing hebben naar Microsoft.AspNet.Identity.Owin;

    met behulp van Microsoft.AspNet.Identity.Owin;

  2. Definieer GetOwinContext()onder HttpContext.Currentzoals 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

Other episodes