如何在 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.Main
由 blazor.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 页面。并在服务器端使用所需参数填充脚本中的数组的逻辑。
Blazor WASM 应用程序中的 Program.Main
方法具有 string[] args
参数。 ASP.NET 核心主机站点是否可以将参数传递给这些?我需要能够在构建应用程序之前从服务器读取一个值。
Program.Main
由 blazor.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 页面。并在服务器端使用所需参数填充脚本中的数组的逻辑。