程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Asp.net Boilerplate之AbpSession擴展,

Asp.net Boilerplate之AbpSession擴展,

編輯:關於.NET

Asp.net Boilerplate之AbpSession擴展,


當前Abp版本1.2,項目類型為MVC5.

以屬性的形式擴展AbpSession,並在"記住我"後,下次自動登錄也能獲取到擴展屬性的值,版權歸"角落的白板報"所有!

step1.添加IAbpSessionExtensions接口:

    /// <summary>
    /// IAbpSession Extensions 登錄時"記住我"保存Cookie,也就是說關閉後再打開不重新登錄的話,取得到值.
    /// </summary>
    public interface IAbpSessionExtensions : IAbpSession
    {
        string UserName { get; }
        string EmailAddress { get; }
        string Name { get; }
        string FullName { get; }
        string Surname { get; }
    }

step2.添加實現類AbpSessionExtensions:

/// <summary>
    /// IAbpSession Extensions
    /// </summary>
    public class AbpSessionExtensions : ClaimsAbpSession, IAbpSessionExtensions
    {
        public AbpSessionExtensions(IMultiTenancyConfig multiTenancy) : base(multiTenancy)
        {

        }

        public string EmailAddress => GetKeyValue(ClaimTypes.Email);
        public string Surname => GetKeyValue(ClaimTypes.Surname);
        public string Name => GetKeyValue(ClaimTypes.Name);
        public string UserName => GetKeyValue(EnglishConsts.ClaimTypes.UserName);
        public string FullName => GetKeyValue(EnglishConsts.ClaimTypes.FullName);

        private string GetKeyValue(string key)
        {
            var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;

            if (claimsPrincipal == null)
            {
                return null;
            }

            var claim = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == key);
            if (string.IsNullOrEmpty(claim?.Value))
            {
                return null;
            }

            return claim.Value;

        }
    }

step3.在Mvc控制器基類(項目名稱ControllerBase)裡添加AbpSession屬性:

        //IAbpSession Extensions
        public new IAbpSessionExtensions AbpSession { get; set; }

step4.在Account控制器的SignInAsync方法裡成功登錄後(AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = rememberMe }, identity),添加需要擴展的屬性:

            //IAbpSession Extensions
            identity.AddClaim(new Claim(ClaimTypes.Email, user.EmailAddress));
            identity.AddClaim(new Claim(ClaimTypes.Name, user.Name));
            identity.AddClaim(new Claim(ClaimTypes.Surname, user.Surname));
       //這個常量自己去定義 identity.AddClaim(new Claim(EnglishConsts.ClaimTypes.UserName, user.UserName)); identity.AddClaim(new Claim(EnglishConsts.ClaimTypes.FullName, user.FullName)); 

step5.這裡我定義了兩個自定義常量,加在了項目名稱Consts常量定義文件裡:

 public class EnglishConsts
    {
        public const string LocalizationSourceName = "English";

        public class ClaimTypes
        {
            public const string UserName = "UserName";
            public const string FullName = "FullName";
        }
    }

 

這樣就完成了,登錄或下次自動登錄之後,在代碼裡的智能提示裡就可以看到擴展的屬性:

而且值也保存在了裡面:

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved