SORU
4 Ocak 2014, CUMARTESİ


MVC5 - Kimlik ASP. Nasıl geçerli ApplicationUser almak için

7 ** özelliği Author adlandırdıkları proje ile Madde varlık var. Nasıl geçerli tam nesne alabilir miyim açmış ApplicationUser. Yeni madde oluştururken geçerli ApplicationUser 11 Author ayarlama özelliği var.

Eski Üyelik mekanizmaları basit oldu ama yeni Kimlik mekanizmaları içinde bunu yapmak için nasıl bilmiyorum.

Bu şekilde yapmaya çalıştım:

  • Ekleyin Kimlik uzantıları deyimi kullanarak: using Microsoft.AspNet.Identity;
  • Geçerli kullanıcı almak için deneyin: ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == User.Identity.GetUserId());

Ama istisna olsun :

Yöntem tanımıyor Varlıklar bu SERİ 'Sistemi.Dize GetUserİd(Sistemi.Güvenlik.Müdür.İİdentity)' yöntemi, ve mağaza bir ifade tercüme edilemez bu yöntem. Kaynak=EntityFramework

CEVAP
3 NİSAN 2014, PERŞEMBE


Veritabanı doğrudan geçerli ApplicationUser için sorgu gerekmez.

Bu yeni başlayanlar için ekstra bir içeriğe sahip, ama ileriye dönük kullanıcı veritabanı tabloları değiştirmek (son 2 yıl içinde 3 kez) yeni bir bağımlılık tanıtır ama API tutarlıdır. Örneğin users tablo şimdi AspNetUsers Kimlik Çerçevesinde denir ve birkaç birincil anahtar alanların adlarını birçok sorunun cevabı bu kod artık çalışmayacak kadar değişen tuttugibi.

ASP.Net kimlik geçerli kullanıcı nesnesi erişmek için doğru yolu (bu tarih itibariyle)

var user = UserManager.FindById(User.Identity.GetUserId());

ya da, eğer zaman uyumsuz bir eylem varsa, gibi bir şey

var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

FindById (. aşağıdaki zaman uyumsuz UserManager yöntemleri kullanılabilir bu ifadeyi kullanarak gerektirir ^em>uzatma yöntemlerieğer bu dahil değil yani kullanıcısı Yöneticisi'ni seçin, sadece FindByIdAsync):

using Microsoft.AspNet.Identity;

Eğer hiç bir denetleyicisi IOC enjeksiyon kullanıyorsanız (örneğin) değilse, o zaman kullanıcı kimliği tam olarak alınır:

System.Web.HttpContext.Current.User.Identity.GetUserId();

Eğer standart Hesap denetleyicisini değil kumandanız için aşağıdaki (örnek olarak) eklemek gerekir:

1. Bu iki özellik ekleyin:

    /// <summary>
    /// Application DB context
    /// </summary>
    protected ApplicationDbContext ApplicationDbContext { get; set; }

    /// <summary>
    /// User manager - attached to application DB context
    /// </summary>
    protected UserManager<ApplicationUser> UserManager { get; set; }

2. Kumandanın yapıcı bu ekleyin:

    this.ApplicationDbContext = new ApplicationDbContext();
    this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));

Mart 2015 Güncelleştirin

Not:Kimlik çerçevesinde en son güncelleme temel dersleri kimlik doğrulaması için kullanılan bir değişiklik.Şimdi geçerli olan HttpContent Owin içerikten erişebilirsiniz.

ApplicationUser user = System.Web.HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • calicoJake

    calicoJake

    29 EKİM 2007
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010