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

在IIS上发布时无法加载Blazor webassembly应用程序,iis,asp.net-core-webapi,blazor-webassembly,Iis,Asp.net Core Webapi,Blazor Webassembly,在使用本地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客户端应用程序的

在使用本地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/" />

Sincroadru API是一个.Net核心3.1 Web API项目,IIS服务器版本为7.5(Win 2k8 R2),IIS本地版本为10(Win 10)


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

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

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

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


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

Yep原因确实是WebAssembly中的url是区分大小写的,正如您所说,您的脚本根据当前的浏览url替换了base href标记,但我更愿意更改基本url以匹配“Sincroadru Api”。谢谢。今天我改变了主意,如果您在不同的虚拟目录中托管多个版本的webassembly应用程序,那么您的脚本非常有用。谢谢。@请注意,此脚本依赖于请求的URL和初始href中的基本路径长度相同。因此,如果您的虚拟目录具有不同的长度,这将不起作用。如果您的所有虚拟目录都具有相同的“深度”,则可以在实际路径名中搜索第n个正斜杠。我更改了let href=window.location.pathname,例如删除的substr,因为现在Blazor应用程序托管在一级虚拟目录上,例如。