在 IIS 上发布时无法加载 Blazor webassembly 应用程序

Unable to load a Blazor webassembly application when published on IIS

在使用本地 IIS 和 Visual Studio 的开发笔记本电脑上一切正常。在我通过 Azure Devops 发布应用程序的服务器上,Blazor 应用程序无法加载并出现此 javascript 错误

System.ArgumentException: The URI 'http://10.144.2.7/SincroADR_Api/' is not contained by the base URI 'http://10.144.2.7/SincroADR_API/'.

在 Blazor 客户端应用程序的 index.html 上,我有这个基础 url

<base href="/SincroADR_API/" />

SincroADR_API是一个.Net Core 3.1 Web Api项目,IIS服务器是7.5版(Win 2k8 R2),IIS本地是10(Win 10)。

所有 Blazor 文件(js、webassembly)都在浏览器上正确下载,但我不明白为什么它在本地 IIS 中工作。有什么想法吗?

base 标签中的 href 属性必须匹配请求的 URL 的相应部分,包括符号的大小写。如果您查看错误消息,请求的 URL 的“_Api”部分与基本 href 的“_API”部分不匹配。

这是一个非常不方便的错误。您可以通过修改基本 href 以匹配用于导航到您的应用程序的 URL 来解决此问题。

在 wwwroot/index.html 文件中,将以下脚本放在 blazor webassembly include 之前:

<script>
    let baseTag = document.getElementsByTagName('base')[0];
    let baseHref = baseTag.getAttribute('href');
    let href = window.location.pathname.substr(0, baseHref.length)
    if (!href.endsWith('/')) href += '/';
    baseTag.setAttribute('href', href);
</script>