You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:40:24