成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET Core如何全局獲取用戶信息?

開發 后端
既然是全局獲取用戶信息,難道是定義靜態變量?怎么可能,當然是基于請求而獲取,基于靜態變量必然存在多個用戶請求覆蓋信息的情況。

[[409638]]

鑒于如上場景很常見,難道我們沒發覺這樣做很是繁瑣嗎?于是乎,我們想要解放生產力,下面咱們來聊聊我個人的想法。

全局獲取用戶信息

既然是全局獲取用戶信息,難道是定義靜態變量?怎么可能,當然是基于請求而獲取,基于靜態變量必然存在多個用戶請求覆蓋信息的情況。

那我們到底應該怎么全局獲取?首先我們想到的過濾器比如ActionFilter...等等,但要是我們需要進行異步操作呢?貌似又不可行。

根據我查詢官方文檔,沒搞錯的話,應該是從1.0開始就給出了異步過濾器,那就是IAsyncActionFilter,此方法不同于ActionFilter的是,它能夠處理異步操作,同時它是在模型綁定完成之后執行,也就是只有一個異步方法。

  1. public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next
  2.     await next(); 

接下來我們定義全局用戶會話類,如下:

  1. public class Session 
  2.     /// <summary> 
  3.     /// 用戶id 
  4.     /// </summary> 
  5.     public string UserId { get; set; } 
  6.     /// <summary> 
  7.     /// 用戶名 
  8.     /// </summary> 
  9.     public string UserName { get; set; } 

緊接著,比如項目我們使用JWT,則拿到聲明中用戶標識和用戶賬號,那么我們接下來我們只需要實現上述異步action過濾器接口即可,如下:

  1. public class AsyncSessionFilter : IAsyncActionFilter 
  2.     private readonly Session _session; 
  3.   
  4.     public AsyncSessionFilter(Session session) 
  5.     { 
  6.         _session = session; 
  7.     } 
  8.      
  9.     public async Task OnActionExecutionAsync( 
  10.       ActionExecutingContext context, 
  11.       ActionExecutionDelegate next
  12.     { 
  13.         var user = context.HttpContext.User
  14.  
  15.         _session.UserId = user.FindFirst(JwtRegisteredClaimNames.Sub)?.Value; 
  16.  
  17.         _session.UserName = user.FindFirst(JwtRegisteredClaimNames.UniqueName)?.Value; 
  18.  
  19.         await next(); 
  20.     } 

最后,則很簡單的進行上述接口實現和會話注入,如下:

  1. //注冊用戶會話 
  2. services.AddScoped<Session>(); 
  3.     
  4. //注冊全局過濾器    
  5. services.AddControllers(options => 
  6.    options.Filters.Add<AsyncSessionFilter>(); 
  7. }) 

在實際使用中,我們只需要在倉儲或服務層構造函數使用Session,即可拿到用戶名和用戶id,從而最終解決對于新增和更改操作處理操作人信息,如此是不是來的更加方便簡潔呢? 

在.NET Core中借助實現異步IAsyncActionFilter接口而實現全局獲取用戶信息

 

責任編輯:武曉燕 來源: JeffckyShare
相關推薦

2011-07-18 14:44:29

2021-12-26 09:20:41

APP權限移動應用

2021-07-11 17:17:08

.NET 授權自定義

2019-02-24 22:37:00

2021-11-11 16:46:02

CPU使用率 .NET

2021-11-04 05:53:51

微信清粉信息安全信息泄露

2011-04-07 11:29:30

軟件項目項目需求

2024-06-20 12:17:17

前端Vue3

2021-10-12 10:00:01

架構機密數據

2022-06-02 15:17:17

iOS隱私蘋果

2021-12-05 18:22:20

.NETLS Cipher套件

2021-05-31 07:18:46

SpringSecurity信息

2009-11-13 10:53:54

ADO.NET Dat

2016-11-14 13:50:56

2024-05-31 12:54:37

.NET CoreLinux語言

2013-06-06 15:13:22

2022-11-24 13:57:28

2023-07-11 07:43:22

2021-03-16 09:55:47

軟件信息安全數據

2017-06-19 06:38:07

移動互聯網移動應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文久久 | 欧产日产国产精品视频 | 亚洲精品黄色 | 天天玩天天干天天操 | jdav视频在线观看免费 | 久久亚洲视频 | 希岛爱理在线 | 国产98色在线| 久久久免费观看视频 | 国产成人精品一区二区三区在线 | 精品日本中文字幕 | 欧美一级三级在线观看 | 亚洲一区二区中文字幕 | 蜜桃视频一区二区三区 | 国产精品五月天 | 性高湖久久久久久久久 | 综合色播| 日屁网站 | 久久久爽爽爽美女图片 | 国内精品99 | 三级在线视频 | 中文字幕不卡在线观看 | 中文字幕高清 | 狠狠综合久久av一区二区老牛 | 337p日本欧洲亚洲大胆鲁鲁 | 国产精品激情小视频 | www.久久久久久久久久久久 | 亚洲成人免费在线 | 一区二区高清不卡 | 91视频亚洲 | 黄一区二区三区 | 亚洲一区二区三区在线播放 | 国产精品久久久久久久午夜片 | 亚洲高清视频在线观看 | 我我色综合 | 国产精品一卡 | 久久大陆| 国产综合第一页 | 久久亚洲精品视频 | 日韩在线视频一区 | 欧美日韩亚洲系列 |