.NET Core 獲取 Request/Headers 等信息


 

在需要使用的類的構造函數注入 IHttpContextAccessor 即可使用;

 

 

 

例如獲取 Origin / Referer 信息:

 

 

 

2、如果不能通過注入的方式來實例化 IHttpContextAccessor,下面我們就來處理這種場景。

背景介紹:提供接口供第三方調用,而接口中其實不做數據處理(暫時),只做轉發並且需要將 Header 信息一並轉發,其實就是實現了一次透傳,而在 ApiActionFilterAttribute 類從 Startup 初始化時就不能獲取到 IHttpContextAccessor,這是就需要通過控制反轉的方式在被調用時再按需實例化。

 1 public class ThirdPartyJianweiHttpRegistrarHeaderAttribute : ApiActionFilterAttribute  2 {  3     private readonly IConfigurationRoot _appConfiguration;  4  
 5     public ThirdPartyJianweiHttpRegistrarHeaderAttribute(IConfigurationRoot appConfiguration)  6  {  7         _appConfiguration = appConfiguration;  8  }  9  
10     public override async Task OnBeginRequestAsync(ApiActionContext context) 11  { 12         //從請求中獲取 Header 並注入 WebApiClient Header 中傳遞, context.GetService<IHttpContextAccessor> 實現了 IHttpContextAccessor 實例化。
13         var request = context.GetService<IHttpContextAccessor>().HttpContext.Request; 14         if (request != null) 15  { 16             var headers = request.Headers; 17             if (headers != null) 18  { 19                 var keyId = headers["keyId"].FirstOrDefault(); 20                 var code = headers["rCode"].FirstOrDefault(); 21                 context.RequestMessage.Headers.Add("keyId", keyId); 22                 context.RequestMessage.Headers.Add("ts", headers["ts"].FirstOrDefault()); 23                 context.RequestMessage.Headers.Add("rCode", code); 24                 context.RequestMessage.Headers.Add("signature", headers["signature"].FirstOrDefault()); 25  } 26  } 27         await base.OnBeginRequestAsync(context); 28  } 29  
30     public override Task OnEndRequestAsync(ApiActionContext context) 31  { 32         return base.OnEndRequestAsync(context); 33  } 34 
35 }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM