【发布时间】:2020-06-18 00:09:57
【问题描述】:
我在访问自定义授权处理程序中的会话数据时遇到了困难,而它在其他地方工作。
会话在控制器操作中正常工作,但是当我尝试在MyAuthorizationHandler.HandleRequirementAsync 中使用IHttpContextAccessor.HttpContext.Session 访问它时,我得到一个InvalidOperationException“尚未为此应用程序或请求配置会话。”。
IHttpContextAccessor 可以访问查询、cookie 等 - 但无法访问会话数据。
如果我尝试从控制器访问相同的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();
}
注意:我不能在这个处理程序中使用声明,我需要会话数据。
【问题讨论】:
标签: c# asp.net-core asp.net-core-3.1 asp.net-authorization