为什么 Blazor 的 index.html 或 _Host.razor 文件中有一个 <base href="/" />?

Why is there a <base href="/" /> in Blazor's index.html or _Host.razor file?

在每个 Blazor 项目中,index.html_Host.razor 中都有一个 <base href="/">(取决于您使用的是 Blazor WebAssembly 还是 Blazor Server)。

现在,我知道 what this tag does,只需在其 href 属性中放入任何值,就会添加到 HTML 文档中的每个相对路径。

但是,我不明白为什么它在每个 Blazor 项目中都默认放置在那里。例如,如果您使用的是 Blazor WebAssembly,则在 index.html 文件的末尾有这一行:

<script src="_framework/blazor.webassembly.js"></script>

这个路径的开头显然没有/,因为文档中有<base href="/" />,但为什么他们不能简单地添加一个前导/到这条路径是为了完全消除对 base 标签的需要?!为什么要添加基本标签?!

我也试过手动删除 <base href="/" /> 标签,而是在所有路径中添加前导 /,但我很快发现这样做会导致问题: 如果您的页面具有类似 /counter/something 的路径(超过两层),则 blazor.webassembly.js 文件在加载后会将其他所需的 JS 文件和程序集添加到 HTML动态页面,在没有前导斜杠的情况下添加它们,并且基本上假设有一个 <base href="/" />.

例如,blazor.webassembly.js 加载路径为“_framework/blazor.boot.json”的文件。但是在我刚才解释的场景中,这会导致 404 错误,因为这是一个相对路径并且没有“/counter/_framework/blazor.boot.json”.

因此,这基本上意味着在每个 Blazor 应用程序中实际上必须具有 <base href="/" />!但是为什么?!

来自here

The app base path is the app's root URL path. Consider the following ASP.NET Core app and Blazor sub-app:

Without specifying additional configuration for CoolApp, the sub-app in this scenario has no knowledge of where it resides on the server. For example, the app can't construct correct relative URLs to its resources without knowing that it resides at the relative URL path /CoolApp/.