Blazor WebAssembly - 如何在自动生成的 web.config 中添加“http 到 https”URL 重写规则

Posted

技术标签:

【中文标题】Blazor WebAssembly - 如何在自动生成的 web.config 中添加“http 到 https”URL 重写规则【英文标题】:Blazor WebAssembly - how to add a "http to https" URL rewrite rule in auto-generated web.config 【发布时间】:2021-06-08 22:15:48 【问题描述】:

我有一个 Blazor WebAssembly 应用程序,如果用户尝试通过 http 访问网页,我想自动重定向到 https。

对于其他非 WASM 站点,我会在 IIS 配置中执行此操作,使用“URL 重写”将任何此类调用重定向到等效的 https。这些规则直接存储在 web 文件夹中的 web.config 文件中。

但是,在将 Blazor WebAssembly 应用发布到 IIS 时,Visual Studio 会创建自己的 web.config 文件 其中包含 SPA 正确运行/路由所需的其他 url 重写规则:

发布到 IIS 后,我可以进入并创建我的“http -> https”规则,然后将其添加到之前生成的 web.config 文件中。

从 http 到 https 的重定向是一种享受。

但是,每次我将应用程序发布到 IIS 时,此 web.config 文件都会被覆盖,并且我的 http 到 https 规则丢失。

有没有办法在 Visual Studio Blazor WebAssembly 项目中的某处定义此重定向规则,以便自动包含在自动生成的 web.config 中?

任何指导将不胜感激。

【问题讨论】:

【参考方案1】:
<Target Name="CopyWebConfigOnPublish" AfterTargets="Publish">
  <Copy SourceFiles="web.config" DestinationFolder="$(PublishDir)" />
</Target>

应该做的伎俩。原文来源here。

【讨论】:

【参考方案2】:

在项目目录的根目录下新建一个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>
                    <clear />
                    <rule name="Redirect to https" stopProcessing="true">
                        <match url=".*" />
                        <conditions>
                            <add input="HTTPS" pattern="off" ignoreCase="true" />
                        </conditions>
                        <action type="Redirect" url="https://HTTP_HOSTREQUEST_URI" redirectType="Permanent" appendQueryString="false" />
                    </rule>
                    <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>

并将以下行添加到您的项目文件中:

    <PropertyGroup>
        <PublishIISAssets>true</PublishIISAssets>
    </PropertyGroup>

【讨论】:

以上是关于Blazor WebAssembly - 如何在自动生成的 web.config 中添加“http 到 https”URL 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

Blazor Webassembly 如何在页面上显示纯文本 (Loader.io)

我们如何使用 State 容器 Blazor Webassembly 从子级调用方法

「译」 用 Blazor WebAssembly 实现微前端

如何在 GitLab Pages 中将 Blazor WebAssembly 部署为静态站点

如何将 Blazor WebAssembly 连接到数据库

Blazor Webassembly:如何将组件插入字符串