Во время запуска я настраиваю файл 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". Другие свойства этого объекта также неверны: все они кажутся значениями по умолчанию.
Почему это происходит и как мне получить действительный экземпляр этого объекта параметров?
@BenderBoy Спасибо. Я делаю что-то подобное - по необходимости. Но это хак, и я бы хотел этого избежать. Кроме того, для всех остальных параметров конфигурации файлов cookie установлены значения по умолчанию. Я очень удивлен, что это не работает.
Вы пробовали вводить CookieAuthenticationOptions вместо IOptions?





ASP.NET Core Identity использует именованный подход IOptions, но DI по умолчанию IOptions предоставляет безымянный экземпляр по умолчанию (в данном случае) CookieAuthenticationOptions. Это означает, что экземпляр, который вы получаете от DI, отличается от экземпляра, настроенного с помощью ConfigureApplicationCookie.
Чтобы получить доступ к именованному экземпляру IOptions, вы можете использовать IOptionsSnapshot или IOptionsMonitor (документы). Вот пример того, как получить доступ к экземпляру ASP.NET Core Identity CookieAuthenticationOptions:
Вставьте IOptionsMonitor<CookieAuthenticationOptions> в конструктор контроллера.
В действии используйте следующий код:
var cookieName = cookieAuthenticationOptions
.Get(IdentityConstants.ApplicationScheme)
.Cookie.Name;
Спасибо, это сработало. Всякий раз, когда мне нужна конфигурация запуска, я обычно добавляю IOptions<T>, поэтому я сделал то же самое и здесь. Я не рассматривал проблему именования.
Мне любопытно, можно ли узнать, какие объекты параметров называются, а какие нет? Как в данном случае вы узнали, что нужный мне объект options был одним из названных? (Полагаю, можно просто попробовать оба пути, если знать об этой «подвохе».)
Я сталкивался с этим раньше при работе с AuthN, который имеет концепцию имен схем и, следовательно, требует возможности настройки нескольких экземпляров. В частности, здесь ConfigureApplicationCookie использует перегрузку...
Не могли бы вы поместить имя файла cookie в файл appsettings.json и просто ссылаться на
IConfigurationв обоих местах?