请求处理遇未处理异常:Session未配置及ISessionStore解析失败
解决Session配置异常:Unable to resolve service for type 'Microsoft.AspNetCore.Session.ISessionStore'
这个异常是因为你的ASP.NET Core应用未正确注册Session服务或启用Session中间件导致的,按以下步骤修复:
1. 注册Session服务
在Program.cs(.NET 6+)或Startup.cs(.NET 5及更早版本)中,先添加Session服务:
.NET 6+ 示例(Program.cs)
var builder = WebApplication.CreateBuilder(args); // 先添加核心服务(比如控制器、视图等) builder.Services.AddControllersWithViews(); // 注册Session服务,可按需配置参数 builder.Services.AddSession(options => { // 设置Session闲置过期时间 options.IdleTimeout = TimeSpan.FromMinutes(30); // 配置Session Cookie属性 options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; });
.NET 5及更早示例(Startup.cs)
在ConfigureServices方法中添加:
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); // 注册Session服务 services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(30); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; }); }
2. 启用Session中间件
Session中间件的顺序很关键,必须放在路由中间件之后、授权中间件之前:
.NET 6+ 示例(Program.cs)
var app = builder.Build(); // 其他管道配置(比如静态文件、Https重定向等) app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 启用Session,位置不能错 app.UseSession(); app.UseAuthorization(); // 路由映射 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
.NET 5及更早示例(Startup.cs)
在Configure方法中添加:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件配置(异常处理、静态文件等) app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 启用Session app.UseSession(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
关键注意事项
- 必须先注册Session服务(
AddSession),再启用中间件(UseSession),顺序颠倒会导致异常。 - 如果需要在视图中使用Session,确保已启用相关服务(比如
AddControllersWithViews包含了视图所需的Session支持)。
内容的提问来源于stack exchange,提问作者Soudha A.M
相关产品推荐
相关产品推荐

