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

托管型Blazor WASM应用基路径本地正常但作为IIS子应用失效

需补充的配置如下:


1. 修正Program.cs中UsePathBase的执行顺序

UsePathBase必须是构建app对象后第一个执行的中间件,早于所有路由、静态文件、认证授权、接口映射相关的中间件,否则路由中间件无法识别/app前缀的路径,会直接返回404。
示例正确顺序:

var app = builder.Build();
// 必须放在第一行,所有其他中间件之前
app.UsePathBase("/app");

// 后续其他中间件按顺序配置
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.MapBlazorHub();
// 必须配置fallback规则,处理前端路由
app.MapFallbackToFile("index.html");

app.Run();

2. 安装IIS必备组件

  • 安装你Blazor应用对应版本的ASP.NET Core托管捆绑包,安装完成后重启IIS,否则IIS无法处理ASP.NET Core的接口请求
  • 安装IIS官方URL重写模块,用于解决SPA路由直接访问404的问题
  • 确认子应用对应的应用池配置为:无托管代码、托管管道模式为集成模式

3. 配置IIS URL重写规则

在Blazor应用的发布根目录下添加web.config文件,添加以下配置,将所有非物理文件、非接口的请求重定向到index.html,交给Blazor前端路由处理:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <remove fileExtension=".blat" />
      <mimeMap fileExtension=".blat" mimeType="application/octet-stream" />
      <remove fileExtension=".dll" />
      <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
      <remove fileExtension=".json" />
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <remove fileExtension=".wasm" />
      <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
      <remove fileExtension=".woff" />
      <mimeMap fileExtension=".woff" mimeType="font/woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".woff2" mimeType="font/woff2" />
    </staticContent>
    <rewrite>
      <rules>
        <rule name="Blazor SPA Routing" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <add input="{REQUEST_URI}" pattern="^/(app)/api/" negate="true" />
          </conditions>
          <action type="Rewrite" url="/app/index.html" />
        </rule>
      </rules>
    </rewrite>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\替换为你的Server项目名.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  </system.webServer>
</configuration>

注意替换配置中的替换为你的Server项目名.dll为你实际发布的服务端程序集名称。

4. 校验API路由和请求路径

  • 确保服务端控制器已配置正确的路由属性,比如[Route("api/[controller]")]
  • 前端发起接口请求时,使用相对路径(比如fetch('api/fetchdata')),不要使用不带/app前缀的绝对路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:57:01