¿Cómo puedo acceder a los navegadores localStorage en Blazor?

asp.net-core blazor c#

Pregunta

Quiero admitir JWTs, así que necesito mantener el token alrededor; ¿Hay alguna facilidad para acceder a esto? ¿O deberíamos simplemente registrar nuestra propia función javascript para acceder a esta funcionalidad por ahora?

Edición: por consejo, intenté usar interoperabilidad JS como:

<script>
    localStorage.setItem("key1", "key1data");
    Blazor.registerFunction("readStorage", (key) => {
        return localStorage.getItem(key);
    });
</script>
@if (jwtKey == null)
{
<div class="login-panel">
    <p>JWT not loaded</p>
</div>
}
else
{
<div class="login-panel">
    <p>@jwtKey</p>
</div>
}

@functions {
    public RenderFragment Body { get; set; }
    string jwtKey;

    protected override async Task OnInitAsync()
    {
        jwtKey = RegisteredFunction.Invoke<string>("readStorage", "key1");
        if (jwtKey == null)
        {
            jwtKey = "Unknown";
        }
    }
}

Pero esto resulta en un error WASM en diag:

WASM: [Microsoft.AspNetCore.Blazor.Browser.Interop.JavaScriptException] No se pudo encontrar la función registrada con el nombre 'readStorage'. WASM: Error: No se pudo encontrar la función registrada con el nombre 'readStorage'.

Para su información, esto está en el MainLayout.cshtml del proyecto repetitivo Blazor VS.

(Puede hacer una nueva pregunta si es apropiado; aunque algo relacionado con esta)

Respuesta aceptada

Para 0.1 necesitas escribir tu propia interoperabilidad javascript. Pero creo que esto es algo en lo que se trabajó, y quizás en la versión 0.2.

Alternativamente (si no necesita almacenamiento entre sesiones) puede escribir su propio DI singleton, como se hace aquí: https://github.com/aspnet/samples/blob/master/samples/aspnetcore/blazor/FlightFinder/FlightFinder. Cliente / Servicios / AppState.cs

Editar
Hay una PR abierta para esto, así que de hecho debería estar allí pronto: https://github.com/aspnet/Blazor/pull/205

Edit2 0.2 está hecho, pero aún no hay almacenamiento local. Mientras tanto, he desarrollado un paquete para esto: BlazorExtensions también en nuget


Respuesta popular

Podría implementarse por defecto en Blazor pero por ahora estoy usando: Nuget - BlazorStorage




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué