Blazor Server应用配置Session后启动失败,无Configure()如何解决?
问题解决:Blazor Server中Session配置导致启动失败
核心问题
你的代码存在两个关键问题:中间件顺序错误(尤其是路由与端点映射的顺序),以及重复注册Blazor服务,这直接触发了启动时的路由中间件异常。
修正步骤及代码
1. 修复服务注册重复问题
原代码中连续两次调用builder.Services.AddServerSideBlazor(),会导致服务重复注册,合并为一次并配置Hub选项即可。
2. 调整中间件执行顺序
中间件的执行顺序严格决定了请求处理流程,必须遵循以下正确顺序:
- 异常处理、安全策略类中间件(最优先)
- HTTPS重定向、静态文件服务
- 路由中间件
- Session中间件
- 端点映射(最后执行)
修正后的完整Program.cs核心代码
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); // 合并Blazor服务注册与Hub配置,避免重复 builder.Services.AddServerSideBlazor(options => { options.HubOptions.MaximumReceiveMessageSize = 10 * 1024 * 1024; // 10mb max file size }); builder.Services.AddSyncfusionBlazor(); builder.Services.AddDistributedMemoryCache(); builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(60); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; }); var app = builder.Build(); // 环境相关中间件优先加载 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 路由中间件必须在端点映射之前 app.UseRouting(); // Session中间件需在路由之后、端点映射之前 app.UseSession(); // 端点映射放在最后 app.UseEndpoints(endpoints => { endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); }); app.Run();
错误原因说明
原代码中将UseEndpoints放在了UseRouting之前,违反了ASP.NET Core路由系统的规则:EndpointRoutingMiddleware(由UseRouting注册)必须在EndpointMiddleware(由UseEndpoints注册)之前执行,否则无法正确完成路由匹配与端点映射,从而抛出InvalidOperationException。
另外,Session中间件的位置也需注意:必须在UseRouting之后(确保路由已匹配)、UseEndpoints之前(确保Session在端点处理前生效)。
内容的提问来源于stack exchange,提问作者innom
相关产品推荐
相关产品推荐

