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

9
在 Blazor WASM 应用程序中,Program.Main 方法拥有 string[] args 参数。ASP.NET Core 主机站点是否可以向其中传递参数?我需要在应用程序构建之前从服务器读取一个值。

你有考虑过使用环境变量吗? - Kirk Woll
你找到答案了吗? - Nick Darvey
2个回答

7

没有默认的方法将这些参数传递进来,因为它们确实被硬编码为 null 在 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>

在您的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 core作为一个index.cshtml页面提供索引页,然后在服务器端编写逻辑以使用所需的参数填充脚本数组。

1
那真是聪明的做法。 - Frederik V

5

Program.Main 是由 blazor.webassembly.js 在这里调用的:here:

invokeEntrypoint(assemblyName, null);

该方法调用了一个名为dotnet静态方法,该方法将空值转换为一个空数组。

因此,目前无法向其传递参数,因为你只能获得一个空数组。


当然,现在正确的方法是使用应用配置 :) - Peter Morris
1
如果你正在做一些动态的事情,比如租户配置,那就有点棘手了。 - Nick Darvey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接