Ho uno scenario in cui ho bisogno di accedere a User.Identity
Claims nel mio Controller del Costruttore.
Ho bisogno di questo perché i reclami hanno informazioni necessarie per farmi girare un DB Contesto personalizzato (stringa di connessione)
Come posso andare ad accedere a questo? Vorrei solo iniettare nel DBContext, ma in base all'utente, potrebbe essere necessario accedere a un DB diverso.
C'è un modo migliore per pensarci?
[Authorize]
public class DefaultController : Controller
{
public DefaultController()
{
// this is NULL
var authenticatedUser = User.Identity.Name;
}
}
A partire dalla versione 2.1 di ASP.NET Core, viene fornito HttpContextAccessor
. Per questo dobbiamo seguire i seguenti passi:
Configurare il servizio utilizzando l'implementazione standard nel metodo ConfigureServices
di Startup.cs
:
services.AddHttpContextAccessor();
Eseguire l'iniezione delle dipendenze di IHttpContextAccessor
sui controller. Utilizzare la proprietà HttpContext
per accedere User
[Authorize]
public class DefaultController : Controller
{
public DefaultController(IHttpContextAccessor contextAccessor)
{
// Here HttpContext is not Null :)
var authenticatedUser = contextAccessor.HttpContext.User.Identity.Name;
}
}