Korzystam z interfejsu ASP.NET Core Web API, w którym mam wiele niezależnych projektów internetowych. Przed wykonaniem któregokolwiek z działań kontrolerów, muszę sprawdzić, czy zalogowany użytkownik podszywa się pod innego użytkownika (który mogę uzyskać od DB) i może przekazać identyfikator podanego użytkownika do akcji.ASP.NET Core Middleware przekazujące parametry do kontrolerów
Ponieważ jest to fragment kodu, który będzie ponownie wykorzystane, pomyślałem mogę używać middleware więc:
- mogę uzyskać wstępną logowanie użytkownika z nagłówka żądania
- Pobierz impesonated ID użytkownika, jeśli każdy
- wstrzyknąć ten identyfikator w żądaniu rurociągu do udostępnienia API miano
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);
}
}
Znalazłem to Question, ale to nie rozwiązało tego, czego szukam.
Jak mogę przekazać parametr i udostępnić go w potoku żądania? Czy dobrze jest przekazać go w nagłówku, czy jest na to bardziej elegancki sposób?
należy zmienić kontekst żądania, a nie samego rurociągu. –
@LexLi, czy możesz wyjaśnić na przykładzie, Czy chodzi ci o dodanie pewnych informacji do samego żądania i uzyskanie tego z kontrolera? Jeśli to, co miałeś na myśli, myślałem o tym, ale znowu, gdzie, kwerenda, ciało, nie wpłynęłoby to na wywołane działanie? – Coding