Поделиться через


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