在启动过程中,我配置身份验证 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 使用命名
IOptions
方法,但默认IOptions
DI 提供了默认的未命名实例(在本例中)CookieAuthenticationOptions
。这意味着您从 DI 获取的实例与使用配置的实例不同ConfigureApplicationCookie
。要访问 的命名实例
IOptions
,您可以使用IOptionsSnapshot
或IOptionsMonitor
( docs )。以下是如何访问 ASP.NET Core Identity 实例的示例CookieAuthenticationOptions
:注入
IOptionsMonitor<CookieAuthenticationOptions>
到控制器的构造函数中。在操作中,使用以下代码: