gpt4 book ai didi

c# - 如何在 ASP.NET Core 3.1 的 IAuthorizationHandler 中访问 session 数据?

转载 作者:行者123 更新时间:2023-12-04 02:38:26 36 4
gpt4 key购买 nike

我在自定义授权处理程序中访问 session 数据时遇到困难,而它在其他地方工作。

session 在 Controller 操作中正常工作,但是当我尝试使用 IHttpContextAccessor.HttpContext.Session 访问它时在 MyAuthorizationHandler.HandleRequirementAsync ,我得到一个 InvalidOperationException “尚未为此应用程序或请求配置 session 。”。IHttpContextAccessor可以访问查询、cookie 等 - 但无法访问 session 数据。

如果我尝试访问相同的 MyAuthorizationHandlerIHttpContextAccessor从 Controller , session 数据是可用的。
MyAuthorizationHandlerConfigureServices 中作为单例注入(inject),初始化的完整顺序:

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();
}

注意:我不能在这个处理程序中使用声明,我需要 session 数据。

最佳答案

app.UseSession();的顺序是不正确的,你应该把它放在任何使用 session 的中间件之前。

public void Configure(...)
{
app.UseSession();

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints...
app.UseMvc();
}

关于c# - 如何在 ASP.NET Core 3.1 的 IAuthorizationHandler 中访问 session 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60544037/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com