如何更改 blazor wasm 应用程序的基本 URL

问题描述

为 blazor wasm 托管应用程序生成的模板的基本 URL 以“/”开头(即 @huey.task(retries=2,retry_delay=10) def flaky_task(): # ... 用于本地开发或 https://localhost:5001/ 部署时。)我需要此基本 URL 为 ' /app' 代替,即 (https://www.domain-name.xyz/) 或 (https://localhost:5001/app)。

文档(herehere)说我必须更改 index.html 中 https://www.domain-name.xyz/app 标记中的基本 URL:

<base />

并在本地开发时使用命令行参数 <base href="/app/" />

--pathbase

我这样做了,并且没有对模板进行任何其他更改。 然而,这对我不起作用。我只是在应用程序的所有文件中找不到 404。

此问题 here 表示我还需要通过将“/app”传递给 UseBlazorFrameworkFiles 来更改 Blazor 文件的公开位置:

dotnet run --pathbase=/app

这也不能解决我的问题。

任何人都可以提供有关如何实现这一目标并保证有效的分步指导。

解决方法

你快到了。我不确定您对根站点做了什么,所以我添加了一个简单的登录页面,其中包含一个指向 WASM SPA 的链接。这是一套完整的说明。

  1. host.html - 将 base 更改为 <base href="/app/" />。这将确保 SPA 中的所有 @Page 指令都以 app 为前缀。您需要尾随 /
  2. host.html - 将脚本引用更改为 <script src="/app/_framework/blazor.webassembly.js"></script>。如果您托管单个 WASM SPA,则无需更改它就可以逃脱。实验。
  3. WASM 项目文件添加 StaticWebAssetBasePath。这会使用正确的路径设置构建。
  <PropertyGroup>
    <StaticWebAssetBasePath>app</StaticWebAssetBasePath>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>
  1. 更新 Server 项目中的 Startup,为 mywebsite/app 添加一个新的中间件路径
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseWebAssemblyDebugging();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios,see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();


    app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/app"),first =>
    {
        first.UseBlazorFrameworkFiles("/app");
        first.UseStaticFiles();

        first.UseRouting();
        first.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapFallbackToFile("app/{*path:nonfile}","app/index.html");
        });
    });

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
        // endpoints.MapFallbackToFile("_index.cshtml");
        endpoints.MapFallbackToPage("/_Index");
    });
}

我已将默认登录页面添加到根站点 - _Index.cshtml

@page "/"
@model WebApplication2.Server.Pages._IndexModel
    <h3>Hello App</h3>
<div><a href="/app">App WASM SPA</a></div>
@{
}

注意 FetchData 在您更新控制器 url 之前不会工作

forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("/WeatherForecast");

您还可以将 WASM wwwroot 移动到根目录中,并在 _App.cshtml 处添加启动页面以启动 SPA。

有关详细信息,请参阅 Github 站点 here by Javier Nelson 和我撰写的关于如何使用 Github 存储库在同一网站 here 上托管多个 SPA 的文章。