一開始懷疑,為何 Controller 需要注入 IHttpContextAccessor 呢?因為原本
的 Controller 就已經可以透過 HttpContext 存取相關值來應用了,待到親手實
作後才發現,原來是因為 DI 走的極致, 不僅僅是 Controller ,而是其他如
Service 也可能會需要透過 HttpContext 來做存取,如取得 Request、Response、
Session 等等的,以下動手紀錄一下
注入 IHttpContextAccessor
使用 WebApi 專案類型示範,可於 Startup.cs 類別加入
如上圖,在 ConfigureServices 函式中,透過 AddHttpContextAccessor 方法註冊,
另外注入 自訂型別 UserService,而UserService 類別中有使用 HttpContext ,
故需要注入,如下圖,記得要 using Microsoft.AspNetCore.Http
接著,回到 Controller 本身,在建構式被注入 HttpContext、UserService
應用的話,可以於方法中直接呼叫對應的函式,如下圖中,直接呼叫 GetLoginUserName,
但由於內部的 HttpContext.User.Identity.Name 值為 null ,可下中斷點檢視。
其中比較特別的是,紅框中的上方,是直接使用 Controller 已支援的 HttpContext 來示範。
將中斷點下在 UserService 建構式,觀察 HttpContext 狀況
加入 Middleware
若有需要在 pipeline 處理 httpcontext ,其實與之前文章介紹的差不多。
使用 Use 方式
使用自訂 Middleware 方式
首先設計 CustomHttpContextMiddleware 類別
Configure 手動加入
沒有留言:
張貼留言