.net 8.0 System.InvalidOperationException:“Session has not been configured

在 .NET 8.0 中,如果你遇到了 System.InvalidOperationException 异常,提示"Session has not been configured",这通常意味着你的应用程序试图使用会话(Session)功能,但是会话状态管理没有被正确配置。在 ASP.NET Core 中,会话是通过中间件来配置的,而不是在全局的 web.config 文件中设置。

要解决这个问题,你可以按照以下步骤进行:

1. 添加 Session 中间件

确保你的应用程序中添加了 Session 中间件。你可以在 Startup.csProgram.cs 文件中配置它。

在 Program.cs 中配置(适用于 ASP.NET Core 5.x 及以后版本)

服务注册:

// 添加 Session 服务

builder.Services.AddSession();

启动配置:

app.UseSession(); // 使用 Session 中间件

cs 复制代码
var builder = WebApplication.CreateBuilder(args);

// 添加 Session 服务
builder.Services.AddSession();

var app = builder.Build();

// 确保在 app.UseRouting() 和 app.UseAuthentication() 之后调用
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSession(); // 使用 Session 中间件
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

2. 配置 Session 存储提供程序

默认情况下,ASP.NET Core 使用内存中的会话存储。如果你需要持久化会话(例如,在多个实例之间共享会话),你可以使用其他存储提供程序,如 SQL Server、Redis 等。例如,使用 Redis:

cs 复制代码
services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromSeconds(10); // 设置空闲超时时间
    options.Cookie.HttpOnly = true; // 设置 cookie 为 HttpOnly
});

然后,你可以使用 StackExchange.Redis 来存储会话数据:

cs 复制代码
services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = "localhost"; // Redis 服务器地址和端口号
});

更多:

.Net Core上传组件7.2

C# 易联云打印机对接教程

C#获取视频第一帧_腾讯云媒体处理获取视频第一帧

相关推荐
唐青枫19 小时前
别把 Razor 当成几段 HTML:C#.NET Razor Pages、MVC 视图与实战详解
c#·.net
宝桥南山1 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
Lost of 程序猿1 天前
.NET 10 船端单机部署与离线升级实战:从闪退事故到无感回滚
c#·asp.net·.net
慧都小妮子1 天前
Word/Excel/PPT 如何稳定导出 Markdown?文档 SDK 三线能力拆解
.net·markdown·知识库·aspose·rag·文档转换·文档互操作
唐青枫2 天前
对象到底住在哪里?C#.NET 托管堆从分配、GC 到内存排查
c#·.net
geovindu2 天前
CSharp:Condition Variable Pattern
后端·设计模式·c#·.net·.netcore·条件变量模式·同步型模式
de之梦-御风2 天前
【未来】.NET 开发在「劳动价值重估」下的定位与走向
职场和发展·.net
fogota2 天前
C# 如何调用系统图标
c#·.net
△曉風殘月〆2 天前
.NET是什么?为什么要选择.NET?
c#·.net·.net core·clr
fogota2 天前
C# WPF 按钮加载字体图标 / 动物头像
c#·.net·wpf