Durante a inicialização, configuro o cookie de autenticação de identidade:
services.ConfigureApplicationCookie(x =>
{
x.Cookie.Name = "foo"; // default is ".AspNetCore.Identity.Application"
// other config...
});
Eu preciso das informações desse cookie durante o tempo de execução, então em algum controlador eu injeto IOptions<CookieAuthenticationOptions>
e tento obter o nome do cookie:
var cookieName = cookieAuthenticationOptions.Value.Cookie;
Isso dá ".AspNetCore."
em vez de "foo"
. As outras propriedades desse objeto também estão erradas, todas parecem ser valores padrão.
Por que isso está acontecendo e como obtenho uma instância válida desse objeto de opções?
O ASP.NET Core Identity usa uma abordagem nomeada
IOptions
, mas oIOptions
DI padrão fornece uma instância padrão e sem nome de (neste caso)CookieAuthenticationOptions
. Isso significa que a instância que você obtém do DI é diferente daquela configurada usandoConfigureApplicationCookie
.Para acessar uma instância nomeada de
IOptions
, você pode usarIOptionsSnapshot
ouIOptionsMonitor
( docs ). Aqui está um exemplo de como acessar a instância do ASP.NET Core Identity deCookieAuthenticationOptions
:Injete
IOptionsMonitor<CookieAuthenticationOptions>
no construtor do controlador.Na ação, use o seguinte código: