ASP.NET Core 环境(environment) Taghelper

admin
admin
2021-06-03
分享:

本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP)
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core

ASP.NET Core 环境(environment) Taghelper

在这个视频中,我们将通过一个例子讨论 ASP.NET Core 中的 Environment Taghelper。

需求场景

  • 我们在 ASP.NET Core 应用程序中使用 Bootstrap。
  • 为了便于调试,在我们的本地开发机器上(即在开发环境中),我们希望应用程序加载非缩小 bootstrap 的 css 文件即(bootstrap.css)
  • 而在 Staging,Production 或除 Development 环境之外的任何其他环境中,我们希望应用程序从 CDN(内容分发网络)加载缩小的 bootstrap 的 css 文件(bootstrap.min.css)以获得更好的性能。
  • 但是,如果 CDN 出现故障或由于某种原因,我们的应用程序无法访问 CDN 的时候,我们希望我们的应用程序回退并从我们自己的应用程序 Web 服务器加载缩小的 bootstrap 文件(bootstrap.min.css)。

我们可以使用 ASP.NET Core <environment>Tag Helper 轻松实现这一点。在我们理解<environment>Tag Helper 之前,首先让我们了解如何设置应用程序环境的名称。

ASP.NET Core Environment Tag Helper

Environment tag helper 支持根据应用程序环境呈现不同的内容。使用 ASPNETCORE_ENVIRONMENT变量设置应用程序环境名称。

如果应用程序环境是"Development",则此示例加载非缩小的 bootstrap css 文件。

<environment include="Development">
    <link href="~/lib/bootstrap/css/bootstrap.css" rel="stylesheet"/>
</environment>

如果应用程序环境是"Staging"或者 "Production",则此示例从 CDN(内容传送网络)加载缩小的 bootstrap css 文件。

<environment include="Staging,Production">
    <link rel="stylesheet"
            href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
            integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
            crossorigin="anonymous">
</environment>

"include"属性接受将单个环境环境名称以逗号分隔的形式生成列表。 在<environment>tag helper 上,我们还有"exclude"属性, 当托管环境与 exclude 属性值中列出的环境名称不匹配时,将呈现标签中的内容。

如果应用程序环境不是"Development",则此示例从 CDN(内容分发网络)加载缩小的 bootstrap css 文件。

<environment exclude="Development">
    <link rel="stylesheet"
            href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
            integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
            crossorigin="anonymous">
</environment>

<link>元素上的"integrity"属性用于检查子资源完整性Subresource Integrity(简称 SRI)是一种安全功能,允许浏览器检查被检索的文件是否被恶意更改。 当浏览器下载文件时,它会重新计算哈希并将其与"完整性"属性哈希值进行比较。 如果哈希值匹配,则浏览器允许下载文件,否则将被阻止。

如果 CDN 失败怎么办?

如果 CDN 出现故障或由于某种原因,我们的应用程序无法访问 CDN,我们希望我们的应用程序从我们自己的应用程序 Web 服务器加载缩小的 bootstrap 文件(bootstrap.min.css)。请考虑以下示例:

<environment include="Development">
    <link href="~/lib/bootstrap/css/bootstrap.css" rel="stylesheet"/>
</environment>

<environment exclude="Development">
    <link rel="stylesheet"
            integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
            crossorigin="anonymous"
            href="https://sstackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
            asp-fallback-href="~/lib/bootstrap/css/bootstrap.min.css"
            asp-fallback-test-class="sr-only" asp-fallback-test-property="position"
            asp-fallback-test-value="absolute"
            asp-suppress-fallback-integrity="true"/>
</environment>

如果应用程序环境是"Development",则从我们的应用程序 Web 服务器加载非缩小的 bootstrap 的 css 文件(bootstrap.css)。 如果应用程序环境不是"Development",则从 CDN 加载缩小的 bootstrap css 文件(bootstrap.min.css)。

使用 asp-fallback-href属性指定回退源。这意味着,如果 CDN 关闭,我们的应用程序将回退并从我们自己的应用程序 Web 服务器加载缩小的 bootstrap 文件(bootstrap.min.css)。

以下 3 个属性及其相关值用于检查 CDN 是否已关闭:

asp-fallback-test-class="sr-only"
asp-fallback-test-property="position"
asp-fallback-test-value="absolute"

当然,这里面是会有一些涉及计算哈希并将其与文件的完整性属性哈希值进行比较。 对于大多数应用程序,CDN 失效的时候回退的都是到他们自己的服务器。 通过将asp-suppress-fallback-integrity属性设置为 true,当然您也可以选择关闭从本地服务器下载的文件完整性检查。

文章说明

如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com 保留版权

感谢您对我的支持

关注微信公众号:角落的白板报

公众号:角落的白板报