Udostępnij za pośrednictwem


Blazor: interop między tablicami bajtów

Blazor Obsługuje teraz zoptymalizowane międzyoperacyjnie tablicy bajtów, co pozwala uniknąć kodowania i dekodowania tablic bajtowych w bazie Base64 i ułatwia bardziej wydajny proces międzyoperacyjności. Dotyczy to zarówno serwera, jak Blazor i Blazor zestawu WebAssembly.

Wprowadzona wersja

ASP.NET Core 6.0

Odbieranie tablicy bajtów w języku JavaScript z platformy .NET

Stare zachowanie

function receivesByteArray(data) {
    // Previously, data was a Base64-encoded string representing the byte array.
}

Nowe zachowanie

function receivesByteArray(data) {
    // Data is a Uint8Array (no longer requires processing the Base64 encoding).
}

Przyczyna wprowadzenia zmiany

Ta zmiana została wprowadzona w celu utworzenia bardziej wydajnego mechanizmu międzyoperacyjnego dla tablic bajtów.

Odbieranie tablicy bajtów w języku JavaScript z platformy .NET

Rozważmy tę międzyoperację platformy .NET, w której wywołujesz metodę w języku JavaScript przekazującą tablicę bajtów:

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

W poprzednim przykładzie kodu należy traktować parametr przychodzący w języku JavaScript jako tablicę bajtów zamiast ciągu zakodowanego w formacie Base64.

Zwracanie tablicy bajtów z języka JavaScript do platformy .NET

Jeśli platforma .NET oczekuje byte[]elementu , język JavaScript powinien dostarczyć element Uint8Array. Nadal można udostępnić tablicę zakodowaną w formacie Base64 przy użyciu btoametody , jednak jest to mniej wydajne.

Jeśli na przykład masz następujący kod, należy podać kod Uint8Array z języka JavaScript, który nie jest zakodowany w formacie Base64:

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