如何在 Blazor WebAssembly 应用程序中将 (string[] args) 传递给 Program.Main?

How are (string[] args) passed to Program.Main in a Blazor WebAssembly app?

Blazor WASM 应用程序中的 Program.Main 方法具有 string[] args 参数。 ASP.NET 核心主机站点是否可以将参数传递给这些?我需要能够在构建应用程序之前从服务器读取一个值。

Program.Mainblazor.webassembly.js here:

调用
invokeEntrypoint(assemblyName, null);

它命中一个 dotnet static method,然后将 null 变成一个空数组。

所以不,现在不可能向它传递参数,因为你只会得到一个空数组。

没有默认方式来传递这些参数,因为它们确实在 blazor.webassembly.js 中被硬编码为 null。但是可以通过 javascript.

提供它们

在您的索引页中,包括以下内容:

<!-- Put this script block above the one that loads blazor.webassembly.js -->
<script>
    window.startupParams = function() { return ['first', 'second', 'third']; };
</script>

在你的Program.cs中:

public static async Task Main(string[] args)
{
    var builder = WebAssemblyHostBuilder.CreateDefault(args);
    var js = (IJSInProcessRuntime)builder.Services.BuildServiceProvider().GetRequiredService<IJSRuntime>();
    var startupParams = js.Invoke<string[]>("startupParams");

    // ... etc ...
}

在这个 github 答案中找到。

我们从 asp.net 核心提供索引页面,作为 index.cshtml 页面。并在服务器端使用所需参数填充脚本中的数组的逻辑。