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