将.NET 8 Blazor Server部署到IIS后路由异常问题求助
Blazor Server (.NET 8) IIS部署导航/404问题解决
你遇到的导航跳过testPublish路径、控制器404问题,核心原因是应用未识别IIS虚拟目录的路径前缀,以下是具体修复步骤:
1. 修正App.razor的base href配置
当前硬编码的<base href="/" />会强制所有相对路径从网站根目录开始,需改为动态获取应用根路径:
@inject NavigationManager NavigationManager <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <base href="@NavigationManager.BaseUri" /> <!-- 其余head内容保持不变 --> </head> <!-- 其余body内容保持不变 --> </html>
2. 在Program.cs中添加路径前缀中间件
在应用构建完成后,添加UsePathBase指定虚拟目录路径,确保所有路由自动带上前缀:
var app = builder.Build(); // 新增此行,放在UseHttpsRedirection之前 app.UsePathBase("/testPublish"); // 以下原有代码保持不变 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.UseAntiforgery(); app.MapRazorComponents<App>() .AddInteractiveServerRenderMode(); app.Run();
3. 控制器路由适配
如果控制器使用了[Route]特性,无需硬编码前缀,UsePathBase会自动为所有控制器请求加上/testPublish前缀。若仍有404问题,可检查控制器的路由特性是否正确,例如:
[Route("[controller]/[action]")] public class HomeController : Controller { // 示例Action,访问路径会自动变为/testPublish/Home/Index public IActionResult Index() { return Ok(); } }
4. IIS部署额外检查
- 确认IIS应用程序池的**.NET CLR版本**设置为
无托管代码(ASP.NET Core应用自带运行时,无需IIS托管)。 - 确保服务器已安装ASP.NET Core Hosting Bundle,否则IIS无法处理ASP.NET Core请求。
内容的提问来源于stack exchange,提问作者JackJack
相关产品推荐
相关产品推荐

