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

将.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:25:08