Blazor: interoperabilidad de matriz de bytes
Blazor ahora admite la interoperabilidad optimizada de matriz de bytes, lo que evita codificar y descodificar matrices de bytes en Base64 y facilita un proceso de interoperabilidad más eficaz. Esto se aplica a Blazor Server y a Blazor WebAssembly.
Versión introducida
ASP.NET Core 6.0
Recepción de una matriz de bytes en JavaScript desde .NET
Comportamiento anterior
function receivesByteArray(data) {
// Previously, data was a Base64-encoded string representing the byte array.
}
Comportamiento nuevo
function receivesByteArray(data) {
// Data is a Uint8Array (no longer requires processing the Base64 encoding).
}
Motivo del cambio
Este cambio se realizó para crear un mecanismo de interoperabilidad más eficaz para las matrices de bytes.
Acción recomendada
Recepción de una matriz de bytes en JavaScript desde .NET
Considere esta interoperabilidad de .NET, donde se llama a JavaScript pasando una matriz de bytes:
var bytes = new byte[] { 1, 5, 7 };
await _jsRuntime.InvokeVoidAsync("receivesByteArray", bytes);
En el ejemplo de código anterior, trataría el parámetro entrante en JavaScript como una matriz de bytes y no como una cadena con codificación Base64.
Devolución de una matriz de bytes de JavaScript a .NET
Si .NET espera un elemento byte[]
, JavaScript debe proporcionar un objeto Uint8Array
. Todavía es posible proporcionar una matriz codificada en Base64 mediante btoa
, pero con un rendimiento menor.
Por ejemplo, si tiene el código siguiente, debe proporcionar un elemento Uint8Array
de JavaScript que no esté codificado con Base64:
var bytes = await _jsRuntime.InvokeAsync<byte[]>("someJSMethodReturningAByteArray");