簡體   English   中英

MVC 5-檢索ApplicationUser對象

[英]MVC 5 - retrieving the ApplicationUser object

我正在開發MVC 5 Internet應用程序,並且對在ApplicationUser對象中具有自定義對象有疑問。

我在ApplicationUser對象中有一個public virtual Account account對象,該對象保存了MVC 5應用ApplicationUser對象的許多最大計數變量。 當用戶注冊帳戶時,將為每個用戶設置此項。

創建模型對象之前,請檢查用戶是否未超過模型對象的最大數量。 這是在對象的服務類中完成的。

這是用於文件對象的代碼示例:

var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
ApplicationUser user = userManager.FindByNameAsync(userName).Result;
int maxFiles = user.account.maxFiles;

我對具有相似代碼的許多對象使用了許多服務類來檢索ApplicationUser對象。

我的問題是:不是每次為每個服務類都檢索ApplicationUser對象,而是當用戶登錄時是否可以存儲該對象,然后在創建模型對象之前引用該對象? 如果是這樣,出於上述目的,我可以在哪里存儲該對象?

另外,檢索ApplicationUser對象時會使用多少內存/帶寬? 是否使用了最小的內存/帶寬,這樣我在創建模型對象之前每次檢索ApplicationUser對象時都不必擔心內存/帶寬?

提前致謝。

這是添加具有已登錄身份值的聲明的典型情況。

用戶登錄時,請使用此值添加聲明。 然后,此聲明的值將保留在cookie中。 並且每次用戶回來時都可用,並且這是非常快速的查找,無論如何都會進行cookie身份驗證。

這個要求增加了身份,你需要重寫CreateIdentityAsync方法上ApplicationUserManager

public override async Task<ClaimsIdentity> CreateIdentityAsync(ApplicationUser user, string authenticationType)
{
    var identity = await base.CreateIdentityAsync(user, authenticationType);

    identity.AddClaim(new Claim("MyApplication:maxFiles", user.account.maxFiles));

    return identity;
}

然后,您可以創建一個擴展方法來訪問它:

public static int GetMaxFiles(this IPrincipal principal)
{
    if (principal == null)
    {
        throw new ArgumentNullException("principal");
    }

    var claimsPrincipal = principal as ClaimsPrincipal;
    if (claimsPrincipal == null)
    {
        throw new DomainException("User is not authenticated or IPrincipal is not ClaimsPrincipal");
    }

    var claim = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == "MyApplication:maxFiles");
    int maxfiles = 0;
    if(int.TryParse(claim.Value, out maxfiles))
    {
        return maxfiles;
    }
    throw new Exception("Claim value is not an integer")
}

在您的應用程序中,您可以將其用作var maxFiles = HttpContext.Current.User.GetMaxFiles() 或者,如果它是控制器或視圖,則可以執行var maxFiles = User.GetMaxFiles()

這是非常快速的查找,不會進入您的數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM