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

Pet*_*ris 4 webassembly blazor

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

Bjo*_*cke 7

没有默认的方式来传递这些参数,因为实际上它们在blazor.webassembly.js. 然而,可以通过 javascript 提供它们。

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

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

在您的 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 ...
}
Run Code Online (Sandbox Code Playgroud)

正如在这个github答案中找到的那样。

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

  • 这其实很聪明。 (2认同)

Nic*_*vey 5

Program.Mainblazor.webassembly.js 在这里调用:

invokeEntrypoint(assemblyName, null);
Run Code Online (Sandbox Code Playgroud)

它击中了一个dotnet 静态方法,然后将 null 转换为空数组。

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