成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 詳解ABP框架中Session功能的使用方法

詳解ABP框架中Session功能的使用方法

熱門標簽:外呼電話機器人成本 臨沂智能電話機器人加盟 聯(lián)通官網(wǎng)400電話辦理 蘇州如何辦理400電話 百應(yīng)電話機器人外呼系統(tǒng) 地圖標注軟件免費下載 400電話辦理怎么樣 西寧呼叫中心外呼系統(tǒng)線路商 網(wǎng)絡(luò)電話外呼系統(tǒng)上海

如果一個應(yīng)用程序需要登錄,則它必須知道當前用戶執(zhí)行了什么操作。因此ASP.NET在展示層提供了一套自己的SESSION會話對象,而ABP則提供了一個可以在任何地方
獲取當前用戶和租戶的IAbpSession接口。

關(guān)于IAbpSession
需要獲取會話信息則必須實現(xiàn)IAbpSession接口。雖然你可以用自己的方式去實現(xiàn)它(IAbpSession),但是它在module-zero項目中已經(jīng)有了完整的實現(xiàn)。

注入Session
IAbpSession通常是以屬性注入的方式存在于需要它的類中,不需要獲取會話信息的類中則不需要它。如果我們使用屬性注入方式,我們可以用
NullAbpSession.Instance作為默認值來初始化它(IAbpSession),如下所示:

public class MyClass : ITransientDependency
{
  public IAbpSession AbpSession { get; set; }

  public MyClass()
  {
    AbpSession = NullAbpSession.Instance;
  }

  public void MyMethod()
  {
    var currentUserId = AbpSession.UserId;
    //...
  }
}

由于授權(quán)是應(yīng)用層的任務(wù),因此我們應(yīng)該在應(yīng)用層和應(yīng)用層的上一層使用IAbpSession(我們不在領(lǐng)域?qū)邮褂肐AbpSession是很正常的)。
ApplicationService, AbpController 和 AbpApiController 這3個基類已經(jīng)注入了AbpSession屬性,因此在Application Service的實例方法中,能直接使用AbpSession屬性。

使用Session屬性
AbpSession定義的一些關(guān)鍵屬性:

  • UserId: 當前用戶的標識ID,如果沒有當前用戶則為null.如果需要授權(quán)訪問則它不可能為空。
  • TenantId: 當前租戶的標識ID,如果沒有當前租戶則為null。
  • MultiTenancySide: 可能是Host或Tenant。

UserId和TenantId是可以為null的。當然也提供了不為空時獲取數(shù)據(jù)的 GetUserId()和GetTenantId() 方法 。當你確定有當前用戶時,你可以使用GetUserId()方法。

如果當前用戶為空,使用該方法則會拋出一個異常。GetTenantId()的使用方式和GetUserId()類似。

ABP如何實現(xiàn)Session的
目錄代碼:

類圖:

IAbpSession:IAbpSession接口

using Abp.MultiTenancy;

namespace Abp.Runtime.Session
{
  public interface IAbpSession
  {
    long? UserId { get; }
    int? TenantId { get; }
    MultiTenancySides MultiTenancySide { get; }
    long? ImpersonatorUserId { get; }
    int? ImpersonatorTenantId { get; }
  }
}

NullAbpSession:實現(xiàn)了空對象模式

using Abp.MultiTenancy;

namespace Abp.Runtime.Session
{
  /// summary>
  /// Implements null object pattern for see cref="IAbpSession"/>.
  /// /summary>
  public class NullAbpSession : IAbpSession
  {
    /// summary>
    /// Singleton instance.
    /// /summary>
    public static NullAbpSession Instance { get { return SingletonInstance; } }
    private static readonly NullAbpSession SingletonInstance = new NullAbpSession();

    /// inheritdoc/>
    public long? UserId { get { return null; } }

    /// inheritdoc/>
    public int? TenantId { get { return null; } }

    public MultiTenancySides MultiTenancySide { get { return MultiTenancySides.Tenant; } }
    
    public long? ImpersonatorUserId { get { return null; } }
    
    public int? ImpersonatorTenantId { get { return null; } }

    private NullAbpSession()
    {

    }
  }
}

ClaimsAbpSession:獲取會話狀態(tài)

using System;
using System.Linq;
using System.Security.Claims;
using System.Threading;
using Abp.Configuration.Startup;
using Abp.MultiTenancy;
using Abp.Runtime.Security;

namespace Abp.Runtime.Session
{
  /// summary>
  /// Implements see cref="IAbpSession"/> to get session properties from claims of see cref="Thread.CurrentPrincipal"/>.
  /// /summary>
  public class ClaimsAbpSession : IAbpSession
  {
    private const int DefaultTenantId = 1;

    public virtual long? UserId
    {
      get
      {
        var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
        if (claimsPrincipal == null)
        {
          return null;
        }

        var claimsIdentity = claimsPrincipal.Identity as ClaimsIdentity;
        if (claimsIdentity == null)
        {
          return null;
        }

        var userIdClaim = claimsIdentity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
        if (userIdClaim == null || string.IsNullOrEmpty(userIdClaim.Value))
        {
          return null;
        }

        long userId;
        if (!long.TryParse(userIdClaim.Value, out userId))
        {
          return null;
        }

        return userId;
      }
    }

    public virtual int? TenantId
    {
      get
      {
        if (!_multiTenancy.IsEnabled)
        {
          return DefaultTenantId;
        }

        var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
        if (claimsPrincipal == null)
        {
          return null;
        }

        var tenantIdClaim = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.TenantId);
        if (tenantIdClaim == null || string.IsNullOrEmpty(tenantIdClaim.Value))
        {
          return null;
        }

        return Convert.ToInt32(tenantIdClaim.Value);
      }
    }

    public virtual MultiTenancySides MultiTenancySide
    {
      get
      {
        return _multiTenancy.IsEnabled  !TenantId.HasValue
          ? MultiTenancySides.Host
          : MultiTenancySides.Tenant;
      }
    }

    public virtual long? ImpersonatorUserId
    {
      get
      {
        var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
        if (claimsPrincipal == null)
        {
          return null;
        }

        var impersonatorUserIdClaim = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId);
        if (impersonatorUserIdClaim == null || string.IsNullOrEmpty(impersonatorUserIdClaim.Value))
        {
          return null;
        }

        return Convert.ToInt64(impersonatorUserIdClaim.Value);
      }
    }

    public virtual int? ImpersonatorTenantId
    {
      get
      {
        if (!_multiTenancy.IsEnabled)
        {
          return DefaultTenantId;
        }

        var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
        if (claimsPrincipal == null)
        {
          return null;
        }

        var impersonatorTenantIdClaim = claimsPrincipal.Claims.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId);
        if (impersonatorTenantIdClaim == null || string.IsNullOrEmpty(impersonatorTenantIdClaim.Value))
        {
          return null;
        }

        return Convert.ToInt32(impersonatorTenantIdClaim.Value);
      }
    }

    private readonly IMultiTenancyConfig _multiTenancy;

    /// summary>
    /// Constructor.
    /// /summary>
    public ClaimsAbpSession(IMultiTenancyConfig multiTenancy)
    {
      _multiTenancy = multiTenancy;
    }
  }
}

AbpSessionExtensions:IAbpSession擴展方法

using System;

namespace Abp.Runtime.Session
{
  /// summary>
  /// Extension methods for see cref="IAbpSession"/>.
  /// /summary>
  public static class AbpSessionExtensions
  {
    /// summary>
    /// Gets current User's Id.
    /// Throws see cref="AbpException"/> if see cref="IAbpSession.UserId"/> is null.
    /// /summary>
    /// param name="session">Session object./param>
    /// returns>Current User's Id./returns>
    public static long GetUserId(this IAbpSession session)
    {
      if (!session.UserId.HasValue)
      {
        throw new AbpException("Session.UserId is null! Probably, user is not logged in.");
      }

      return session.UserId.Value;
    }

    /// summary>
    /// Gets current Tenant's Id.
    /// Throws see cref="AbpException"/> if see cref="IAbpSession.TenantId"/> is null.
    /// /summary>
    /// param name="session">Session object./param>
    /// returns>Current Tenant's Id./returns>
    /// exception cref="AbpException">/exception>
    public static int GetTenantId(this IAbpSession session)
    {
      if (!session.TenantId.HasValue)
      {
        throw new AbpException("Session.TenantId is null! Possible problems: No user logged in or current logged in user in a host user (TenantId is always null for host users).");
      }

      return session.TenantId.Value;
    }

    /// summary>
    /// Creates see cref="UserIdentifier"/> from given session.
    /// Returns null if see cref="IAbpSession.UserId"/> is null.
    /// /summary>
    /// param name="session">The session./param>
    public static UserIdentifier ToUserIdentifier(this IAbpSession session)
    {
      return session.UserId == null
        ? null
        : new UserIdentifier(session.TenantId, session.GetUserId());
    }
  }
}

您可能感興趣的文章:
  • 解析ABP框架中的數(shù)據(jù)傳輸對象與應(yīng)用服務(wù)
  • ABP框架中的日志功能完全解析
  • 詳解ABP框架的參數(shù)有效性驗證和權(quán)限驗證
  • 詳解ABP框架中領(lǐng)域?qū)拥念I(lǐng)域事件Domain events
  • 解析ABP框架中的事務(wù)處理和工作單元
  • 詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對象的使用
  • 解析ABP框架領(lǐng)域?qū)又械膶嶓w類與倉儲類
  • 詳解ABP框架中的日志管理和設(shè)置管理的基本配置
  • ABP框架的基礎(chǔ)配置及依賴注入講解
  • ABP框架的體系結(jié)構(gòu)及模塊系統(tǒng)講解
  • ASP.NET樣板項目ABP框架的特性總結(jié)
  • 基于ASP.NET MVC的ABP框架入門學習教程
  • ABP框架中導(dǎo)航菜單的使用及JavaScript API獲取菜單的方法

標簽:海西 中衛(wèi) 清遠 臨夏 甘肅 聊城 慶陽

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解ABP框架中Session功能的使用方法》,本文關(guān)鍵詞  詳解,ABP,框架,中,Session,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解ABP框架中Session功能的使用方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解ABP框架中Session功能的使用方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    99久久婷婷| 污视频网站在线免费| 天堂一本之道| 亚洲欧美日韩成人网| 色偷偷偷亚洲综合网另类| 国产91porn| 国产精品区二区三区日本| 久久色在线视频| 91精品国产日韩91久久久久久| 国产精品美女免费看| 中文字幕欧美人妻精品| 色婷婷激情综合| 综合分类小说区另类春色亚洲小说欧美| 日本按摩中出| 国产日韩第一页| 女性隐私黄www网站视频| 久久精品免费播放| 激情综合在线| 亚洲免费福利视频| 99综合精品久久| 国产97色在线|日韩| 欧美精品三级在线| 国产精品人人人人| 东方欧美亚洲色图在线| 色噜噜狠狠色综合网| www.操操操.com| 在线免费观看黄色片| 久久成人国产精品入口| 国产精品网站在线观看| ww亚洲ww在线观看国产| 伊人久久大香线蕉av超碰演员| 欧美日韩国产综合视频| 国产成人精品一区二三区在线观看| 加勒比在线一区二区三区观看| 欧美国产日本视频| 在线观看精品一区二区三区| 国产精品综合久久| 久久97精品久久久久久久不卡| 91精品麻豆日日躁夜夜躁| 日本三级网站在线观看| 中文字幕视频在线观看| 尤物视频在线观看国产| 亚洲九九爱视频| 亚洲а∨天堂久久精品2021| 91亚洲一区| 各处沟厕大尺度偷拍女厕嘘嘘| 亚洲第一毛片| 欧美午夜精品理论片a级按摩| 亚洲AV无码国产精品午夜字幕| 不卡的av中文字幕| 美女在线免费视频| 青青草手机视频在线观看| 老司机精品免费视频| 国产精品久久久久久久| 校园春色亚洲色图| 国产精品成久久久久| 女人偷人在线视频| 欧美激情办公室videoshd| 一级一片免费看| 国产婷婷视频在线| 蜜桃色永久入口| 男人操女人在线观看| 加勒比一区二区三区在线| 欧美丰满老妇厨房牲生活| 超碰免费在线97| 成人午夜在线| 一区二区三区四区免费观看| 黑丝一区二区| 久久久国产一区二区三区四区小说| 国产精品初高中精品久久| 国产精品theporn| 蜜桃麻豆影像在线观看| 日韩欧美卡一卡二| 久久精品第九区免费观看| 色一情一区二区| 99久久99久久精品| 在线观看精品自拍视频| 欧美日韩免费在线| 国产成人久久精品77777综合| 伊人久久综合影院| 在线观看视频网站你懂得| 亚洲精品永久视频| 在线观看免费视频一区二区三区| 777777国产7777777| 乱馆动漫1~6集在线观看| 一本大道熟女人妻中文字幕在线| 亚洲欧洲国产精品| 国产精品精品国产| 人妻丰满熟妇av无码区hd| 亚洲国产成人av在线| 国语自产精品视频在线看一大j8| 成人免费视频caoporn| 国产毛片久久久久久久| 亚洲天堂av网站| 欧美一级精品片在线看| 国产大陆精品国产| 欧美日韩精品在线观看| 无码人妻丰满熟妇区毛片18| 国内精品嫩模av私拍在线观看| 成人a视频在线观看| 一本色道无码道dvd在线观看| 亚洲精品mv| www.欧美免费| 亚洲天堂av女优| 国产欧美一区二| 亚洲国产精品成人av| 97久久精品| 国产精品久久久久久久蜜臀| 色婷婷777777仙踪林| av黄在线观看| 91av手机在线| 久久久久久欧美精品se一二三四| 亚洲精品自拍偷拍| 久久久精品免费视频| 亚洲欧美国产精品va在线观看| 成人午夜电影免费在线观看| 欧美性猛片xxxx免费看久爱| 国产精品露脸自拍| 国产成人欧美在线观看| 亚洲人成啪啪网站| 国产天堂视频| а√天堂资源国产精品| 2欧美一区二区三区在线观看视频| 欧美另类极品videosbest视频| 天堂av一区二区三区在线播放| 欧美顶级毛片在线播放| 亚洲天堂免费观看| 久久久久久一区二区三区| 我想看黄色大片| 国产激情在线观看| 鲁一鲁一鲁一鲁一av| 欧美日韩国产成人精品| 亚洲一区国产一区| 亚洲精品日韩综合观看成人91| 成人做爰高清视频网站| 自拍偷拍激情视频| 亚洲精品视频大全| 国产精品国语对白| 亚洲人成小说网站色在线| 四虎影视18库在线影院| 中文字幕色一区二区| 最近中文字幕在线6| 99这里有精品视频| 黄色精品在线看| 青青久久av北条麻妃海外网| 国产精品 欧美 日韩| 国产后入清纯学生妹| 欧美1—12sexvideos| 中文字幕日韩三级| 欧美xxxx做受欧美88bbw| 免费麻豆国产一区二区三区四区| 国产亲伦免费视频播放| 51国偷自产一区二区三区| 日韩av影视大全| 99国产精品久久久久久久久久久| 欧美一卡二卡在线观看| 免费观看黄一级视频| 亚洲精品**不卡在线播he| 久久久日本电影| 国产精品综合二区| 黄页视频在线91| 国产精品爱久久久久久久小说| 欧美日本韩国一区二区| 亚洲成人中文| 国产色婷婷国产综合在线理论片a| 黄网站欧美内射| 国产午夜福利一区| 亚洲黄色免费| 欧美精品v日韩精品v韩国精品v| 丁香六月婷婷| 91精品国产品国语在线不卡| 小处雏高清一区二区三区| 日韩亚洲一区中文字幕| va亚洲va日韩不卡在线观看| 9999久久久久| 国产最新免费视频| 亚洲国产精品成人一区二区| 成人av网站观看| 中文字幕日韩一区二区三区| 欧美午夜一区二区福利视频| 国产精品一区二区6| 黄色片子免费看| xxxxaaa欧美另类| 国产小视频自拍| 国产无码精品在线观看| 亚洲av无码一区二区三区人| 美腿丝袜一区二区三区| 亚洲不卡av一区二区三区| 极品白嫩少妇无套内谢| 亚洲欧美天堂在线| 爽好久久久欧美精品| 免费 成 人 黄 色| 91动漫免费网站| 亚洲三区欧美一区国产二区| 91精品国产91久久久久久久久| 欧美精品日韩综合在线| 国产精品免费丝袜| 日本特黄a级高清免费大片| 丁香六月激情综合| sm性调教片在线观看| 中文字幕在线影院| 亚洲精品成人网| 亚洲午夜久久久| 国产精品大全| 成人av在线不卡| 韩剧1988免费观看全集| 成人在线观看av| 在线欧美三级| 忘忧草精品久久久久久久高清| 7878成人国产在线观看| 中文字幕一区二区中文字幕| 台湾成人av| 97视频网站| 久久66热偷产精品| 天天av天天翘| 欧美性感一类影片在线播放| 成人好色电影| 国产天堂在线观看| 日韩欧美精品免费| 欧美日韩卡一| 久久se这里有精品| 嫩草影院在线观看网站成人| 潘金莲激情呻吟欲求不满视频| www.天堂乱色| 久久精品国产99| 99999精品视频| 麻豆影视在线播放| 亚洲一区3d动漫同人无遮挡| 两个人hd高清在线观看| 亚洲精品一区二区三区在线观看| 久热免费在线观看| 欧美精品少妇videofree| 欧美日本在线一区| 麻豆免费版在线观看| 搞黄网站在线看| fc2在线中文字幕| 在线免费av一区| 成人性生交免费看| 丝袜a∨在线一区二区三区不卡| 久久午夜羞羞影院免费观看| 99精品热视频只有精品10| 欧美国产日韩综合| 少妇精品无码一区二区三区| 国产亲近乱来精品视频| 国产尤物在线观看| 欧美日韩极品在线观看一区| 亚洲熟女少妇一区二区| 日本aⅴ免费视频一区二区三区| 日本高清无吗v一区| 亚洲一区二区蜜桃| 欧美在线小视频| 免费黄色网页| 成人国产精品一区| 天天综合网入口| 亚洲精品欧美日韩专区| 亚洲一区二区三区成人| 成人h动漫精品一区二| 国产精彩视频在线| 中文在线字幕免费观| 国产中文字幕一区| 午夜精品免费| 日韩av一区二区三区美女毛片| 成人免费福利片| av天在线播放| 日韩av资源在线| 蜜桃av噜噜一区二区三| 精品视频一区 二区 三区| 亚洲一区亚洲二区亚洲三区| 久久久女女女女999久久| 国产极品粉嫩福利姬萌白酱| 91精品在线影院| 精品少妇一区二区三区在线视频| 亚洲制服欧美中文字幕中文字幕| 亚洲美女在线免费观看| 亚洲精品一级二级三级| 久久综合九色综合97婷婷女人| 蜜桃视频在线观看免费视频| 91l九色lporny| 川上优av中文字幕一区二区| 福利视频第一区| av中文字幕播放| 国产又黄又大久久| www天堂在线观看| 亚洲天堂久久久久久久| 亚洲国产岛国毛片在线| 男人天堂一区二区| 国产精品高颜值在线观看| 国产一区在线观看麻豆| 视频二区不卡| 午夜久久久久久久久久一区二区| 国产女人18毛片水真多18| 999久久久国产精品| 国产一二三区精品视频| 欧美精品粉嫩高潮一区二区| 精品国产乱码久久久久久蜜臀网站| 中文精品电影| 久久伊人精品视频| 男女羞羞在线观看| 99riav1国产精品视频| 好吊色这里只有精品| 成人h动漫精品| 97超级碰碰碰| 东京热av一区| 国产电影一区二区三区| 国产又大又黑又粗| 欧美日韩黄色影视| 欧美一区二区在线不卡| 中文字幕9999| 亚洲国产电影| 99久久久成人国产精品| 真实国产乱子伦精品一区二区三区| jizz日本在线播放| 国产偷窥女洗浴在线观看亚洲| 日本麻豆一区二区三区视频| 91成人免费视频| 在线播放av网站| 成人精品视频网站| 日韩视频―中文字幕| 正在播放国产精品| 探花国产精品| 黄色在线观看视频网站| 成人午夜激情片| 九色91蝌蚪在线| 91蝌蚪porny| 久草.com| 久久国产精品波多野结衣av| 国产草草浮力影院| 国产福利一区二区|