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

子域名下虚拟目录部署Blazor WebAssembly PWA异常求助

Blazor WebAssembly PWA在IIS虚拟目录无法运行的解决方案

问题背景

子域名下配置两个虚拟目录:ASP.NET Core应用运行正常,但Blazor WebAssembly PWA在虚拟目录中无法启动;将相同文件复制到子域名根目录则可正常运行。当前使用的web.config如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <remove fileExtension=".blat" />
      <remove fileExtension=".dat" />
      <remove fileExtension=".dll" />
      <remove fileExtension=".json" />
      <remove fileExtension=".wasm" />
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".blat" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dat" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff" />
    </staticContent>
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/octet-stream" enabled="true" />
        <add mimeType="application/wasm" enabled="true" />
      </dynamicTypes>
    </httpCompression>
    <rewrite>
      <rules>
        <rule name="Serve subdir">
          <match url=".*" />
          <action type="Rewrite" url="wwwroot\{R:0}" />
        </rule>
        <rule name="SPA fallback routing" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          </conditions>
          <action type="Rewrite" url="wwwroot\" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

问题原因

  1. web.config中的重写规则硬编码了wwwroot\路径,未适配虚拟目录上下文,导致资源请求路径错误。
  2. Blazor WASM的base href未设置为虚拟目录路径,应用无法正确加载静态资源和路由。

解决步骤

1. 修正web.config重写规则

移除硬编码的目录路径,调整为适配虚拟目录的SPA回退规则:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <remove fileExtension=".blat" />
      <remove fileExtension=".dat" />
      <remove fileExtension=".dll" />
      <remove fileExtension=".json" />
      <remove fileExtension=".wasm" />
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".blat" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dat" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff" />
    </staticContent>
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/octet-stream" enabled="true" />
        <add mimeType="application/wasm" enabled="true" />
      </dynamicTypes>
    </httpCompression>
    <rewrite>
      <rules>
        <rule name="SPA fallback routing" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

说明:删除Serve subdir规则,建议将虚拟目录物理路径直接指向Blazor WASM发布后的wwwroot文件夹;调整回退规则直接指向index.html,避免路径冲突。

2. 设置正确的Base Href

在PWA的wwwroot/index.html中,将<base href="/" />修改为虚拟目录路径(例如虚拟目录名为BlazorPWA):

<base href="/BlazorPWA/" />

或发布时通过命令行指定,确保构建路径正确:

dotnet publish -c Release /p:BasePath=/BlazorPWA/

3. 验证IIS配置

  • 虚拟目录物理路径需指向Blazor WASM发布后的wwwroot文件夹(或包含修正后web.config的发布根目录)。
  • 应用程序池设置为No Managed Code(Blazor WASM为静态文件应用,无需.NET托管环境)。

内容的提问来源于stack exchange,提问作者H.M.Mubashir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:53:15