У меня проблемы с доступом к данным сеанса в пользовательском обработчике авторизации, хотя он работает в другом месте.
Сеанс правильно работает в действиях контроллера, но когда я пытаюсь получить к нему доступ с помощью IHttpContextAccessor.HttpContext.Session
в MyAuthorizationHandler.HandleRequirementAsync
, Я получаю InvalidOperationException
«Сеанс не настроен для этого приложения или запроса.». IHttpContextAccessor
имеет доступ к запросу, куки и т. Д. c - но не может получить доступ к данным сеанса.
Если я пытаюсь получить доступ к тем же MyAuthorizationHandler
IHttpContextAccessor
из контроллера, данные сеанса доступно.
MyAuthorizationHandler
вводится как одиночный элемент в ConfigureServices
, полный порядок инициализации:
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache(); ?
services.AddSession(); ?
services.AddDefaultIdentity...
services.AddControllersWithViews();
services.AddRazorPages();
services.AddControllers...
services.AddAuthentication...
services.AddAuthorization...
services.AddHttpContextAccessor(); ?
services.AddSingleton<IAuthorizationHandler, MyAuthorizationHandler>(); ?
services.Configure<CookiePolicyOptions>...
services.AddMvc(o => o.EnableEndpointRouting = false);
}
public void Configure(...)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.UseEndpoints...
app.UseMvc();
}
Примечание: я не могу использовать утверждения в этом обработчике, мне нужны данные сеанса.