Blazor:字节数组互操作

Blazor 现在支持优化的字节数组互操作,这可以避免将字节数组编码和解码为 Base64,同时有利于实现更高效的互操作过程。 这同时适用于 Blazor 服务器和 Blazor WebAssembly。

引入的版本

ASP.NET Core 6.0

从 .NET 接收 JavaScript 中的字节数组

旧行为

function receivesByteArray(data) {
    // Previously, data was a Base64-encoded string representing the byte array.
}

新行为

function receivesByteArray(data) {
    // Data is a Uint8Array (no longer requires processing the Base64 encoding).
}

更改原因

进行此更改旨在为字节数组创建更高效的互操作机制。

从 .NET 接收 JavaScript 中的字节数组

请考虑此 .NET 互操作,其可调用传递字节数组的 JavaScript:

var bytes = new byte[] { 1, 5, 7 };
await _jsRuntime.InvokeVoidAsync("receivesByteArray", bytes);

在以上代码示例中,将 JavaScript 中的传入参数视为字节数组,而非 Base64 编码的字符串。

将字节数组从 JavaScript 返回到 .NET

如果 .NET 需要 byte[],则 JavaScript 应提供 Uint8Array。 仍可使用 btoa 提供 Base64 编码的数组,但性能较低。

例如,如果你有以下代码,则应提供未进行 Base64 编码的 JavaScript 中的 Uint8Array

var bytes = await _jsRuntime.InvokeAsync<byte[]>("someJSMethodReturningAByteArray");