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");