iis 无法获取要作为我的域的子应用程序发布的Blazor Webassembly应用程序

kxeu7u2r  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(129)

我正在使用Blazor Webassembly托管应用程序。我想运行此应用程序作为我的网站的子应用程序,但在一个特定的路径,我有其他子应用程序。示例:site.com/folder/app。我已经尝试了我能想到的所有组合,使用现有的Microsoft文档部署多个Blazor webassembly应用程序,一般部署Blazor webassembly等。
我可以让应用程序在本地主机上启动(通过IIS Express)。我甚至可以在服务器上加载index.html页面,但客户端应用程序不会运行。我的所有资源都返回404错误。
我尝试以几种不同的格式将<StaticWebAssetBasePath>添加到我的client.csproj(如here所示):<StaticWebAssetBasePath>app</StaticWebAssetBasePath><StaticWebAssetBasePath>folder/app</StaticWebAssetBasePath>。这不仅不起作用,而且还破坏了我通过localhost启动的能力(即使我为属性设置了条件)。
我尝试设置不同的Map(app.MapWhen(...)),以便根据我是在本地主机还是服务器上运行,将中间件管道路由到不同的位置。还是什么都没有
我的目标是.Net 7,在我的IIS服务器上安装了最新和最好的。

EDIT我的wasm应用程序正在部署到我站点的虚拟目录中。

m0rkklqb

m0rkklqb1#

供您参考
https://learn.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/?view=aspnetcore-7.0&tabs=visual-studio#app-base-path
通常在index.html中设置标签,基本标签必须在所有引入的CSS和JS之前。
或者,您可以使用JS来设置基本路径。
以下是我的方法:

......
<title>BLZUI</title>
<base />
<script async>
(async () => {
  let flag = true;
  let path = window.location.href;
  while (flag) {
    var response = await fetch(
      `${path.replace(RegExp("\\/+$", "g"), "")}/_framework/blazor.webassembly.js`
    );
    if (response.status != 200) {
      path = path.slice(0, path.lastIndexOf("/") + 1);
    } else {
      flag = false;
    }
  }
  var base = document.getElementsByTagName("base")[0];
  base.setAttribute("href", path.replace(window.location.origin, ""));
})();
</script>
......
iovurdzv

iovurdzv2#

在对我看到的另一个错误消息做了一些挖掘之后,我在一个完全不相关的问题中找到了答案。
正如@andris在他们对this question的回答中指出的那样,Blazor webassembly将基本路径视为区分大小写。这在dotnet/aspnetcore仓库中的Github ticket #6818中得到了证实。由于大小写敏感性(我不知道),它导致了我上面描述的部署错误... Blazor找不到文件,因为它不知道在哪里查找。最后,因为我发布到一个虚拟目录,所以我不需要对中间件管道进行任何配置来告诉应用程序在哪里可以找到静态文件。我可以简单地部署我的应用程序,使用股票配置。

相关问题