获取 ASP.NET Core Identity auth cookie 名称

问题描述 投票:0回答:1

在启动过程中,我配置身份验证 cookie:

services.ConfigureApplicationCookie(x =>
{
  x.Cookie.Name = "foo";    // default is ".AspNetCore.Identity.Application"
  // other config...
});

我在运行时需要该 cookie 的信息,因此在某些控制器中我注入

IOptions<CookieAuthenticationOptions>
,然后尝试获取 cookie 名称:

var cookieName = cookieAuthenticationOptions.Value.Cookie;

这给出了

".AspNetCore."
而不是
"foo"
。该对象的其他属性也是错误的,它们似乎都是默认值。

为什么会发生这种情况?如何获取该选项对象的有效实例?

c# asp.net-core asp.net-core-identity
1个回答
0
投票

ASP.NET Core Identity 使用 named

IOptions
方法,但默认
IOptions
DI 提供了默认的 unnamed 实例(在本例中为)
CookieAuthenticationOptions
。这意味着您从 DI 获得的实例与使用 ConfigureApplicationCookie 配置的实例
不同

要访问

IOptions
的命名实例,您可以使用
IOptionsSnapshot
IOptionsMonitor
(docs)。以下是如何访问
CookieAuthenticationOptions
的 ASP.NET Core Identity 实例的示例:

  1. IOptionsMonitor<CookieAuthenticationOptions>
    注入控制器的构造函数中。

  2. 在操作中,使用以下代码:

    var cookieName = cookieAuthenticationOptions
       .Get(IdentityConstants.ApplicationScheme)
       .Cookie.Name;
    
© www.soinside.com 2019 - 2024. All rights reserved.