使用 IIS 托管和部署 ASP.NET Core Blazor WebAssembly

注释

此版本不是本文的最新版本。 有关当前版本,请参阅 本文的 .NET 10 版本

警告

此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 要查看当前版本,请参阅本文的.NET 9 版本

本文介绍如何使用 Blazor WebAssembly托管和部署

IIS 是一个能够用于 Blazor 应用的静态文件服务器。 若要将 IIS 配置为托管 Blazor,请参阅 在 IIS 上生成静态网站

已发布的资产创建在/bin/Release/{TARGET FRAMEWORK}/publishbin/Release/{TARGET FRAMEWORK}/browser-wasm/publish文件夹中,其中{TARGET FRAMEWORK}占位符是目标框架。 在网络服务器或托管服务上托管个文件夹publish的内容。

web.config 文件

Blazor项目发布后,会创建一个包含以下 IIS 配置的web.config文件。

  • MIME 类型
  • 为以下 MIME 类型启用了 HTTP 压缩:
    • application/octet-stream
    • application/wasm
  • URL 重写模块规则已建立:
    • 为应用的静态资产所在的子目录提供服务(wwwroot/{PATH REQUESTED})。
    • 创建 SPA 回退路由,以便将非文件资产的请求重定向到应用在其静态资产文件夹中的默认文档(wwwroot/index.html)。

使用自定义 web.config

若要使用自定义 web.config 文件,请执行以下作:

  1. 将自定义 web.config 文件放在项目的根文件夹中。
  2. 发布项目。 有关详细信息,请参阅托管和部署 ASP.NET Core Blazor
  1. 将自定义 web.config 文件放在项目的根文件夹中。 对于托管 Blazor WebAssembly解决方案,请将文件 Server 放在项目的文件夹中。
  2. 发布项目。 对于托管 Blazor WebAssembly 解决方案,请从 Server 项目发布解决方案。 有关详细信息,请参阅托管和部署 ASP.NET Core Blazor

如果在发布过程中,SDK 的 web.config 生成或转换未能将文件移动到 publish 文件夹中的已发布资产,或者修改了您的自定义 web.config 文件中的设置,请根据需要使用以下任一方法以完全掌控此过程:

  • 如果 SDK 未生成文件,例如,在独立Blazor WebAssembly 应用程序中/bin/Release/{TARGET FRAMEWORK}/publish/wwwroot,或者在bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish{TARGET FRAMEWORK}中,其中 {TARGET FRAMEWORK} 占位符是目标框架,请在项目文件true中将.csproj属性设置为。 通常对于独立的 WebAssembly 应用,这是移动自定义 web.config 文件并阻止 SDK 转换文件的唯一必需设置。

    <PropertyGroup>
      <PublishIISAssets>true</PublishIISAssets>
    </PropertyGroup>
    
  • 在项目文件中禁用 SDK 的 web.config 转换(.csproj):

    <PropertyGroup>
      <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
    </PropertyGroup>
    
  • 将自定义目标添加到项目文件 (.csproj) 以移动自定义 web.config 文件。 在以下示例中,开发人员将自定义 web.config 文件放置在项目的根目录中。 web.config如果该文件位于其他位置,请指定该文件的路径SourceFiles。 以下示例指定了publish文件夹和$(PublishDir),但提供了指向DestinationFolder的路径作为自定义输出位置。

    <Target Name="CopyWebConfig" AfterTargets="Publish">
      <Copy SourceFiles="web.config" DestinationFolder="$(PublishDir)" />
    </Target>
    

安装 URL 重写模块

URL 重写模块是用于重写 URL 的必要组件。 该模块默认未安装,并且无法作为 Web 服务器(IIS)角色服务功能进行安装。 必须从 IIS 网站下载该模块。 使用 Web 平台安装程序安装模块:

  1. 在本地,导航到 URL 重写模块下载页。 对于英语版本,请选择 WebPI 以下载 WebPI 安装程序。 对于其他语言,请选择服务器(x86/x64)的相应体系结构以下载安装程序。
  2. 将安装程序复制到服务器。 运行安装程序。 选择“ 安装 ”按钮并接受许可条款。 安装完成后,不需要重启服务器。

配置网站

将网站的 物理路径 设置为应用的文件夹。 文件夹包含:

  • web.config IIS 用于配置网站的文件,包括所需的重定向规则和文件内容类型。
  • 应用的静态资产文件夹。

作为 IIS 子应用的主机

如果独立应用作为 IIS 子应用托管,请执行以下任一项操作:

  • 禁用继承的 ASP.NET Core 模块处理程序。

    通过在文件的Blazor节中添加web.config部分,删除<handlers>应用的已发布<system.webServer>文件中的处理程序。

    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    
  • 禁用根(父)应用程序的<system.webServer>节的继承,使用<location>元素,并将inheritInChildApplications设置为false

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <handlers>
            <add name="aspNetCore" ... />
          </handlers>
          <aspNetCore ... />
        </system.webServer>
      </location>
    </configuration>
    

    注释

    禁用根(父)应用 <system.webServer> 部分的继承是使用 .NET SDK 的已发布应用的默认配置。

除了 配置应用的基本路径之外,还执行删除处理程序或禁用继承。 将应用 index.html 文件中的应用基路径设置为在 IIS 中配置子应用时使用的 IIS 别名。

按照 ASP.NET Core Blazor 应用基路径中的指南配置应用的基本路径。

Brotli 和 Gzip 压缩

本部分仅适用于独立 Blazor WebAssembly 应用。

本部分仅适用于独立 Blazor WebAssembly 应用。 托管 Blazor 应用使用默认 ASP.NET 核心应用 web.config 文件,而不是本部分中链接的文件。

可以通过web.config配置 IIS 来为独立Blazor应用程序提供 Brotli 或 Gzip 压缩Blazor WebAssembly文件。 有关示例配置文件,请参阅 web.config

在以下方案中,可能需要对示例 web.config 文件进行其他配置:

  • 应用程序的要求为以下任一项:
    • 提供示例文件未配置的 web.config 压缩文件。
    • 以未压缩格式提供示例 web.config 文件配置的压缩文件。
  • 服务器的 IIS 配置(例如, applicationHost.config)提供服务器级 IIS 默认值。 根据服务器级配置,应用可能需要不同于示例 web.config 文件包含的 IIS 配置。

有关自定义web.config文件的详细信息,请参阅自定义web.config部分的用法

Troubleshooting

如果收到 500 - 内部服务器错误 ,并且 IIS 管理器在尝试访问网站的配置时引发错误,请确认已安装 URL 重写模块。 未安装模块时,IIS 无法解析 web.config 文件。 这可以防止 IIS 管理器加载网站的配置,网站无法提供 Blazor静态文件。

有关对部署到 IIS 的部署进行故障排除的详细信息,请参阅 Azure 应用服务和 IIS 上的 ASP.NET Core 故障排除