ASP.NET kimliği - HttpContext GetOwinContext için bir uzantı yöntemi yok


384

ASP.NET Kimlik örneğini buradan indirdim ve başarıyla çalıştırdım: https://github.com/rustd/AspnetIdentitySample

Şimdi projemde ASP.NET Kimlik çerçevesini uygulamanın ortasındayım ve bir sorunla karşılaştım, bu da beni bütün gün çıldırdı ...

GetOwinContext() cihazımda bir uzantı yöntemi olarak mevcut değil HttpContext

Sınıf kütüphanesinde kimlik çerçevesini uyguluyorum. Identity framework'ün en yeni (yayın öncesi sürümü) yüklendim ve bunun dışında her şey yolunda gidiyor.

Denetleyicimde aynı doğrudan aynı kodu uygulamayı denedim ve aynı sorunu bulun.

Ne olduğuyla ilgili hiçbir fikrim olmasa da, bir yerlerde referansım yok.

Beni öldüren kod bloğu:

private IAuthenticationManager AuthenticationManager
{
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}

Aşağıdakilere referanslar ekledim - bunları hem sınıf kütüphanemde hem de doğrudan denetleyicide denedim, hiçbiri benim için çalışmıyor ...

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;

... bu beni duvardan yukarı itiyor ... bir fikrin var mı?

GÜNCELLEME

Örnekte Identity & OWIN sürümlerini kontrol ettim ve çözümümde aynı sürümlere sahip olduğumdan emin oldum.

Dahası, örnekte nesne tarayıcısını ararsam GetOwinContextyöntemi bulabilirim, ancak çözümümde aradığımda bulunacak hiçbir yer yok ... Güncel olmayan bir kütüphanem olmalı, ancak ' Onu bulamıyorum!

Yanıtlar:


713

ARGH!

Buldum ... Fazladan bir paketim yoktu,Microsoft.Owin.Host.SystemWeb

Bunu araştırıp yükledikten sonra işe yaradı.

Şimdi - ben sadece her şeyi kaçırdı, emin değilim ama çeşitli öğreticiler geçerken böyle bir kütüphane veya pakete NO başvuru bulundu. Tüm bu Kimlik çerçevesini yüklediğimde de yüklenmedi ... Sadece ben olup olmadığımdan emin değilim ..

DÜZENLEMEMicrosoft.Owin.Host.SystemWeb Montajda olmasına rağmen , System.Webad alanında bir uzantı yöntemidir , bu yüzden öncekine başvurmanız ve usingikincisi olmanız gerekir .


6
Bunu çözdüğünüz için teşekkürler: asp.net/identity/overview/getting-started/… bu öğreticiyi kullanıyorum ve bu eksik bir adım
frenchie

23
@tne - yorumunuz için teşekkür ederim ... ben neredeyse 'amaçsız koşturuyordu' - ben güvenilir bir kaynaktan bir öğretici takip ediyordu; asp.net sitesinden daha az. Eğitimlerinde bu adımı atmadılar (o zamandan beri eklendi) - ayrıca, insanların hem bu yanıtı hem de orijinal Q'yu destekliyor olması, bu konuyla ilgili tek kişi olmadığımı belirtiyor.
Darren Wainwright

5
@Darren, yeterince adil. (Farklı şekilde ifade edebileceğimin farkındayım.)
tne


5
Bu referansı güncelleme olup olmadığını bilmiyorum, ama benim atama biraz değiştirmek zorunda kaldı var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;(Akım orada soru yoktu orada dahil).
Ortund

177

HttpContextDenetleyicinin dışındaysanız , akıma başvurmanız gerektiğine inanıyorum . MVC denetleyicilerinin geçerli bağlam için bir temel başvurusu vardır. Ancak, bunun dışında, akımı istediğinizi açıkça belirtmeniz gerekir.HttpContext

return HttpContext.Current.GetOwinContext().Authentication;

Görünmüyorsa, yukarıda ( IAuthenticationManager)) gösterdiğiniz kodu kullanan yeni bir MVC 5 proje şablonu , hesap denetleyicisinin üst kısmında aşağıdaki ifadeleri kullanır:

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;

Her biri yorum GetOwinContext(), aslında System.Web.Mvc derlemesinin bir parçası gibi görünüyor .


Bunu deniyor ve sadece bulamıyorum. - demek istediğim GetOwinContext ().
Darren Wainwright

2
@Darren - Örnek şablonla biraz oynadım ve eksik montajınız olabilir. System.Web.MvcSınıf projenizden referans almanız gerekecek gibi görünüyor . Yorum yapıldığında, yapılan şey HttpContext.GetOwinContext()bilinmemektedir (ve Microsoft.Owin.Securitymeclis değil )
Tommy

Ben de doğrudan bir kontrolör üzerinde çalışmak için elde etmeye çalışıyorum - ve tekrar bulamıyorum.
Darren Wainwright

19
Bu beni harekete geçirdi. Sınıfta bir kamu mülkü HttpContextvar Controller, bu yüzden miras alırsanız, HttpContext.GetOwinContext()beklendiği gibi çalışır. ApiControllerYine de miras alırsanız , böyle bir özellik yoktur. Bu nedenle, HttpContextsınıfın Currentbir örneğine erişmek için kullanmanızı gerektiren sınıfa başvurur . Bu nedenle, bir Denetleyiciden ApiController'a kod kopyalayıp yapıştırırsanız ve neden çalışmadığını merak ederseniz, bu sizin için bir çözümdür.
David Miani

"Current" benim için gotcha oldu
Ok tıklayın

24

Deneme ve hatadan sonra denetleyicimin ve Asp.Net Şablon denetleyicisinin kullanım ifadelerini karşılaştırma

using System.Web;

Sorunu benim için çözdü. Ayrıca şunları da eklemeniz gerekecek:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;

GetUserManager yöntemini kullanmak için.

Microsoft bunu sağ tıklatmayla otomatik olarak çözmenin ve eksik kullanan diğer ifadeler gibi çözmenin bir yolunu bulamadı mı?


1
Bu benim için de işe yaradı. Zaten Kimlik kütüphanelerim vardı, ama System.Web'e ihtiyacı var gibi görünüyor.
SouthShoreAK

1
Görünüşe göre bu hem montajlarda hem de isim alanlarında çok hareket ediyor. Bir uzatma yöntemi olmasıyla gerçekten acı verici hale getirir. Tüm kütüphanelerimi güncelledim ve bu cevap şu anda nerede olduğunu yansıtıyor.
shannon

ah, yeni bir şekilde cehennem cehennem
JustJohn

1
Evet, ne yazık ki, uzantı yöntemleri otomatik olarak çözülemiyor.
Ronen Festinger

22

Benim durumumda nuget yoluyla Microsoft.AspNet.WebApi.Owin referansı eklemek hile yaptı.


Evet, bu son sürümde benim için yaptı. Uzatma yöntemidir: Bu paketin içinde olduğunu Assemby System.Web.Http.Owin ve içinde Namespace System.Net.Http
oatsoda

16

Nuget paketini kurduğunuzdan emin olun Microsoft.AspNet.Identity.Owin. Sonra System.Net.Httpad alanı ekleyin .


Ben de aldım. Identity stuff kurulduğunda başka bir kütüphane kurulu DEĞİLDİR.
Darren Wainwright

@Darren Lütfen paket adı ekleyin. Teşekkür ederim
Saturn Technologies

6
@SaturnTechnologies Benim için diğer paket Microsoft.Owin.Host.SystemWeb ve ad alanı System.Web
WiSeeker

1
İkinci WiSeeker'ım. Benim için bu yardımcı olmadı. Darren'ın yükleme önerisi Microsoft.Owin.Host.SystemWebhile yaptı.
Max Barraclough

13

Sadece

HttpContext.Current.GetOwinContext ()

benim durumumda hile yaptı.


10

Web API Projesinde bu hatayı alan Devs için -

GetOwinContext uzantı yöntemi dll'de tanımlanır System.Web.Http.Owinve bir paket daha gerekir.Microsoft.Owin.Host.SystemWeb . Bu paketin projenize nuget'ten yüklenmesi gerekir.

Pakete Bağlantı : OWIN Paket Kurulum Komutu -

Install-Package Microsoft.AspNet.WebApi.Owin    

System.web Paketine Bağlantı : Paket Yükleme Komutu -

Install-Package Microsoft.Owin.Host.SystemWeb

Bu hatayı çözmek için durumunuzda neden oluştuğunu bulmanız gerekir. Lütfen kodunuzdaki aşağıdaki noktaları kontrol edin -

  1. Referansınız olmalı Microsoft.AspNet.Identity.Owin;

    Microsoft.AspNet.Identity.Owin kullanarak;

  2. Define GetOwinContext()Under HttpContext.Currentaşağıdaki gibi -

     return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

    VEYA

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();

GetOwinContext () öğesinin kullanıldığı Komple Kod -

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

Ad Alanı'nın GetOwinContext () kullanıldığı Kod Dosyasında Kullanıyorum

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;

Kodumu bir projemden diğerine taşırken bu hatayı aldım.


4

API'da UserManager'ı almak için

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();

burada AppUserManager, UserManager öğesinden devralan sınıftır.


4

Tüm doğru paketler ve kullanımlarım vardı, ama işe başlamadan önce inşa etmek zorunda kaldım GetOwinContext().


İlk kez çalışması için yapınızı nasıl düzelttiniz?
Nordes

@Nordes Bazen VS arka planda oluşturulamaz (yani: derleme hataları olduğunu söyler), ancak gerçek bir yapıyı (veya daha sık temiz ve sonra inşa etmeyi) tetikler. Muhtemelen Kevin bunu yaşıyordu.
Maverick

0

Sadece bu paketi yükleyin ve kodunuz çalışacaktır: => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.