[英]How to access session data in IAuthorizationHandler in ASP.NET Core 3.1?
我在自定义授权处理程序中访问会话数据有困难,而它在其他地方工作。
Session 在控制器操作中正常工作,但是当我尝试在IHttpContextAccessor.HttpContext.Session
中使用MyAuthorizationHandler.HandleRequirementAsync
访问它时,我收到一个InvalidOperationException
“Session 尚未为此应用程序或请求配置。”。 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();
}
注意:我不能在这个处理程序中使用声明,我需要会话数据。
app.UseSession();
的顺序app.UseSession();
不正确,你应该把它放在任何使用会话的中间件之前。
public void Configure(...)
{
app.UseSession();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints...
app.UseMvc();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.