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

.NET 8 Blazor应用部署IIS后导航功能异常求助

解决方案

1. 修复base href配置

不要直接移除<base href="/"/>,而是修改为子应用的完整路径并保留尾斜杠:

<base href="/blazortest80/"/>

如果需要动态适配部署路径(避免硬编码),可以在_Host.cshtml(Blazor Server)或根布局文件中通过请求上下文动态生成:

<base href="@($"{Context.Request.PathBase}/")"/>

2. 正确配置UsePathBase中间件

在Program.cs中,将UsePathBase放在UseRouting之前,确保路由系统正确识别子应用路径:

var app = builder.Build();

// 先配置Https重定向、静态文件等中间件
app.UseHttpsRedirection();
app.UseStaticFiles();

// 关键:UsePathBase必须在UseRouting之前
app.UsePathBase("/blazortest80");

app.UseRouting();
app.UseAuthorization();

// 后续Blazor相关配置
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

3. 修复NavigationManager导航失效问题

  • 避免硬编码根路径导航,优先使用相对路径:
    // 正确:相对路径,会自动基于base href拼接
    NavigationManager.NavigateTo("home");
    
  • 如果需要使用绝对路径,通过NavigationManager.BaseUri动态拼接:
    var targetUrl = $"{NavigationManager.BaseUri}home";
    NavigationManager.NavigateTo(targetUrl);
    

4. IIS补充配置:自动补全尾斜杠

添加URL重写规则,让不带尾斜杠的请求自动重定向到带尾斜杠的地址,避免路径解析混乱:
在发布后的web.config中添加以下规则:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Add Trailing Slash" stopProcessing="true">
        <match url="(.*[^/])$" />
        <conditions>
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Redirect" url="{R:1}/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

问题根源说明

之前移除base href会导致Blazor无法正确解析资源路径和导航基准;带尾斜杠的地址能正常访问是因为此时请求路径的基准被正确识别,但不带尾斜杠时,路径基准缺失,导航会错误指向根站点而非子应用。

内容的提问来源于stack exchange,提问作者blindmeis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:07:43