Blazor:位元組陣列 Interop

Blazor 現在支援最佳化的位元組陣列 Interop,這可避免將位元組陣列編碼和解碼為 Base64,並有助於獲取更有效率的 Interop 處理序。 這同時適用於 Blazor Server 和 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).
}

變更原因

進行此變更是為了針對位元組陣列建立更有效率的 Interop 機制。

從 .NET 在 JavaScript 中接收位元組陣列

以這個 .NET Interop 為列,其中您會呼叫傳遞位元組陣列的 JavaScript:

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

在上述程式碼範例中,您會將 JavaScript 中的傳入參數視為位元組陣列,而不是 Base64 編碼字串。

將位元組陣列從 JavaScript 傳回至 .NET

如果 .NET 預期 byte[],JavaScript 就「應該」提供 Uint8Array。 您仍然可以使用 btoa 來提供 Base64 編碼陣列,但效能較低。

例如,如果您有下列程式碼,則「應該」從 JavaScript 提供「不是」Base64 編碼的 Uint8Array

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