ABP Session扩展

先跑到Application层Sessions文件夹下面新建一个IAbpSessionExtensions 的接口  继承于IAbpSession 

然后写上自己所需要的属性 例子:    string UserName { get;  }

代码如下:

namespace MPACore.CRM.Sessions
{
    public interface IAbpSessionExtensions: IAbpSession
    {
        string UserName { get;  }
        string EmailAddress { get;  }
        string Name { get; }
        string FullName { get; }
        string Surname { get; }
    }
}

然后在写一个实现上面接口的类 AbpSessionExtensions 并且同时需要继承 ClaimsAbpSession 这个类

如图:

    public class AbpSessionExtensions : ClaimsAbpSession, IAbpSessionExtensions
    {
        public AbpSessionExtensions(IPrincipalAccessor principalAccessor,
            IMultiTenancyConfig multiTenancyConfig,
            ITenantResolver tenantResolver,
            IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider
            )
            :base(principalAccessor,multiTenancyConfig,tenantResolver,sessionOverrideScopeProvider)
        {
            
        }
        public string UserName => GetKeyValue(EnglishConsts.ClaimTypes.UserName);
        public string EmailAddress => GetKeyValue(ClaimTypes.Email);
        public string Name => GetKeyValue(ClaimTypes.Name);
        public string FullName => GetKeyValue(EnglishConsts.ClaimTypes. FullName);
        public string Surname => GetKeyValue(ClaimTypes.Surname);

       
        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;
        }
    }
    public class EnglishConsts
    {
        public const string LocalizationSourceName = "English";

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

然后分别找到

ControllerBase,AppServiceBase 这两个类

写上    public new IAbpSessionExtensions AbpSession { get; set; }  

覆盖原来的AbpSession 

posted @ 2019-09-06 15:33  脑壳疼  阅读(180)  评论(0)    收藏  举报