Blazor: взаимодействие массивов байтов
Blazor теперь поддерживает оптимизированное взаимодействие массивов байтов. Это позволяет избежать кодирования и декодирования массивов байтов в Base64 и способствует более эффективному процессу взаимодействия. Это применимо как к Blazor Server, так и к Blazor WebAssembly.
Представленные версии
ASP.NET Core 6.0
Получение массива байтов в JavaScript из .NET
Старое поведение
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).
}
Причина изменения
Это изменение было сделано для создания более эффективного механизма взаимодействия для массивов байтов.
Рекомендуемое действие
Получение массива байтов в JavaScript из .NET
Рассмотрим это взаимодействие .NET, в котором вы вызываете JavaScript, передавая массив байтов:
var bytes = new byte[] { 1, 5, 7 };
await _jsRuntime.InvokeVoidAsync("receivesByteArray", bytes);
В предыдущем примере кода, входящий параметр в JavaScript следует рассматривать как массив байтов, а не строку в кодировке Base64.
Возврат массива байтов из JavaScript в .NET
Если .NET ожидает byte[]
, JavaScript должен предоставить Uint8Array
. По-прежнему можно предоставить массив в кодировке Base64 с помощью btoa
, однако это менее производительно.
Например, если у вас есть следующий код, необходимо предоставить Uint8Array
из JavaScript, к которому не применяется кодировка Base64:
var bytes = await _jsRuntime.InvokeAsync<byte[]>("someJSMethodReturningAByteArray");