ABP理論學習之Abp Session
本篇目錄
介紹###
當應用程序要求用戶登錄時,那么應用程序也需要知道當前用戶正在執行的操作。雖然ASP.NET本身在展現層提供了Session對象,但ABP也提供了在任何需要獲得當前用戶和租戶的地方都可以使用的IAbpSession接口。
關于IAbpSession
為了獲得實際的session信息,必須要實現IAbpSession接口。雖然你可以用自己的方式實現它,但在module-zero項目中已經完全實現。
IAbpSession已經完全集成到ABP(實例的設置系統和授權系統)中。
注入Session###
IAbpSession一般屬性注入到需要的類中,除非沒有Session信息導致IAbpSession不可能工作。如果我們使用了屬性注入,那么我們可以使用NullAbpSession.Instance作為默認值,如下所示:
public class MyClass : ITransientDependency
{
public IAbpSession AbpSession { get; set; }
public MyClass()
{
AbpSession = NullAbpSession.Instance;
}
public void MyMethod()
{
var currentUserId = AbpSession.UserId;
//...
}
}
因為授權是應用層的事兒,所以建議在應用層和更高的層使用IAbpSession(一般我們不再領域層使用)。ApplicationService,AbpController,AbpApiController已經注入了 AbpSession。因此,你可以直接在應用層服務方法中為實例使用AbpSession屬性。
使用Session屬性###
AbpSession定義了一些key屬性:
- UserId:當前用戶的Id。值為null,表示當前的用戶不存在。如果調用的代碼授權給某個用戶的話,那么值不為null。
- TenantId:當前租戶的Id。如果當前的租戶不存在,值就為null。
- MultiTenancySide:可能是Host(租主)或者Tenant(租戶)。
UserId和TenantId是nullable(可空的),也存在不可空的GetUserId()和 GetTenantId()方法。如果你確定當前的用戶存在,那么你可以調用GetUserId()。如果當前的用戶為null,那么該方法就會拋異常。GetTanantId()也是類似的。
如果您認為這篇文章還不錯或者有所收獲,您可以通過右邊的“打賞”功能 打賞我一杯咖啡【物質支持】,也可以點擊右下角的【好文要頂】按鈕【精神支持】,因為這兩種支持都是我繼續寫作,分享的最大動力!
作者:tkb至簡
聲明:原創博客請在轉載時保留原文鏈接或者在文章開頭加上本人博客地址,如發現錯誤,歡迎批評指正。凡是轉載于本人的文章,不能設置打賞功能,如有特殊需求請與本人聯系!
已將所有贊助者統一放到單獨頁面!簽名處只保留最近10條贊助記錄!查看贊助者列表
| 衷心感謝打賞者的厚愛與支持!也感謝點贊和評論的園友的支持! | |||
|---|---|---|---|
| 打賞者 | 打賞金額 | 打賞日期 | |
| 微信:匿名 | 10.00 | 2017-08-03 | |
| 微信:匿名 | 10.00 | 2017-08-04 | |
| 微信:匿名 | 5.00 | 2017-06-15 | |
| 支付寶:一個名字499***@qq.com | 5.00 | 2017-06-14 | |
| 微信:匿名 | 16.00 | 2017-04-08 | |
| 支付寶:向京劉 | 10.00 | 2017-04-13 | |
| 微信:匿名 | 10.00 | 2017-003-08 | |
| 微信:匿名 | 5.00 | 2017-03-08 | |
| 支付寶:lll20001155 | 5.00 | 2017-03-03 | |
| 支付寶:她是一個弱女子 | 5.00 | 2017-03-02 | |

浙公網安備 33010602011771號