【问题标题】:How to access session data in IAuthorizationHandler in ASP.NET Core 3.1?如何在 ASP.NET Core 3.1 的 IAuthorizationHandler 中访问会话数据?
【发布时间】:2020-06-18 00:09:57
【问题描述】:

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

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

如果我尝试从控制器访问相同的MyAuthorizationHandlerIHttpContextAccessor,则会话数据可用。

MyAuthorizationHandlerConfigureServices 中作为单例注入,初始化的完整顺序:

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


    【解决方案1】:

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

    public void Configure(...)
    {
       app.UseSession();
    
       app.UseRouting();
       app.UseAuthentication();
       app.UseAuthorization();
    
       app.UseEndpoints...
       app.UseMvc();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 1970-01-01
      • 2020-08-09
      • 2023-04-08
      • 2015-04-20
      • 2017-06-09
      • 2021-06-02
      • 1970-01-01
      • 2021-01-06
      相关资源
      最近更新 更多