在启动过程中,我配置了Identity auth cookie:

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

在运行时我需要cookie的信息,所以在某个控制器中我注入IOptions<CookieAuthenticationOptions>,然后try 获取cookie名称:

var cookieName = cookieAuthenticationOptions.Value.Cookie;

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

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

推荐答案

ASP.NET核心标识使用named IOptions方法,但默认的IOptions DI提供了一个默认的unnamed实例(在本例中)CookieAuthenticationOptions.这意味着从DI获得的实例是different,而使用ConfigureApplicationCookie配置的实例是different.

若要访问IOptions的命名实例,可以使用IOptionsSnapshotIOptionsMonitor(docs).下面是一个如何访问CookieAuthenticationOptions的ASP.NET Core Identity实例的示例:

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

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

    var cookieName = cookieAuthenticationOptions
       .Get(IdentityConstants.ApplicationScheme)
       .Cookie.Name;
    

Csharp相关问答推荐

ListaryImportProperty的默认DllImportSearchPathsProperty行为

ASP.NET MVC购物车数量更新并从购物车中删除项目

我无法在Ubuntu下编译使用microsoft.extension.configurationbuilder jsonapi和mono mcs的c#应用程序

C#中使用BouncyCastle计算CMac

Blazor Foreach仅渲染最后一种 colored颜色

Mongo作为.NET中Testcontainers的副本集

Rider将.NET安装在哪里

Razor视图Razor页面指向同一端点时的优先级

C#-从基类更新子类

WinForms在Linux上的JetBrains Rider中的应用

Selify只更改第一个下拉菜单,然后忽略REST-C#

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

使用C#和.NET 7.0无法访问Cookie中的数据

为什么我的伺服电机不动,下面的代码?

将FileStream的特定部分作为字节数组读取

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

使用未赋值的、传递的局部变量

如何使用IHostedService添加数据种子方法

C#中使用ReadOnlySpan的泛型类型推理

除非首先访问使用的终结点,否则本地API上的终结点不起作用