Krz*_*rko 3 c# asp.net-authorization asp.net-core asp.net-core-3.1
我在自定义授权处理程序中访问会话数据有困难,而它在其他地方工作。
会话在控制器操作中正常工作,但是当我尝试使用IHttpContextAccessor.HttpContext.Sessiona访问它时MyAuthorizationHandler.HandleRequirementAsync,我收到InvalidOperationException“尚未为此应用程序或请求配置会话。”。在IHttpContextAccessor访问查询,饼干等-但无法访问会话数据。
如果我尝试从控制器访问相同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();
}
Run Code Online (Sandbox Code Playgroud)
注意:我不能在这个处理程序中使用声明,我需要会话数据。
的顺序 app.UseSession();不正确,你应该把它放在任何使用会话的中间件之前。
public void Configure(...)
{
app.UseSession();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints...
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |