我正在使用ASP.NET Core Web API,其中有多個獨立的Web API項目。在執行任何控制器的操作之前,我必須檢查登錄的用戶是否已經模擬其他用戶(我可以從數據庫中獲取)並可以將模擬的用戶標識傳遞給操作。ASP.NET核心中間件將參數傳遞給控制器
由於這是一個一段代碼,要被重新使用,以爲可以使用一箇中間件,以便:
- 我可以從請求頭
- 的初始用戶登錄獲取impesonated用戶ID,如果任何
- 注入在請求管道該ID將其提供給API調用
public class GetImpersonatorMiddleware
{
private readonly RequestDelegate _next;
private IImpersonatorRepo _repo { get; set; }
public GetImpersonatorMiddleware(RequestDelegate next, IImpersonatorRepo imperRepo)
{
_next = next;
_repo = imperRepo;
}
public async Task Invoke(HttpContext context)
{
//get user id from identity Token
var userId = 1;
int impersonatedUserID = _repo.GetImpesonator(userId);
//how to pass the impersonatedUserID so it can be picked up from controllers
if (impersonatedUserID > 0)
context.Request.Headers.Add("impers_id", impersonatedUserID.ToString());
await _next.Invoke(context);
}
}
我發現這個Question,但沒有解決我在找什麼。
如何傳遞參數並使其在請求管道中可用?在標題中傳遞它還是可以的,或者有更優雅的方式來做到這一點?
您應該更改請求上下文,不是流水線本身。 –
@LexLi,你可以請一個例子詳細說明,你的意思是添加一些信息到請求本身並從控制器獲取?如果那是你的意思,我正在考慮這個問題,但是又一次,querysting,body,會不會影響被調用的action? – Coding