在启动过程中,我配置身份验证 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"
。该对象的其他属性也是错误的,它们似乎都是默认值。
为什么会发生这种情况?如何获取该选项对象的有效实例?
ASP.NET Core Identity 使用 named
IOptions
方法,但默认 IOptions
DI 提供了默认的 unnamed 实例(在本例中为)CookieAuthenticationOptions
。这意味着您从 DI 获得的实例与使用 ConfigureApplicationCookie
配置的实例不同。
要访问
IOptions
的命名实例,您可以使用 IOptionsSnapshot
或 IOptionsMonitor
(docs)。以下是如何访问 CookieAuthenticationOptions
的 ASP.NET Core Identity 实例的示例:
将
IOptionsMonitor<CookieAuthenticationOptions>
注入控制器的构造函数中。
在操作中,使用以下代码:
var cookieName = cookieAuthenticationOptions
.Get(IdentityConstants.ApplicationScheme)
.Cookie.Name;