Come posso accedere ai browser localStorage in Blazor?

asp.net-core blazor c#

Domanda

Voglio supportare i JWT, quindi ho bisogno di mantenere il token in giro; c'è qualche possibilità per accedere a questo? O dovremmo semplicemente registrare la nostra funzione javascript per accedere a questa funzionalità per ora?

Modifica: per consiglio, ho tentato di utilizzare l'interoperabilità JS come:

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

Ma questo si traduce in un errore WASM in diag:

WASM: [Microsoft.AspNetCore.Blazor.Browser.Interop.JavaScriptException] Impossibile trovare la funzione registrata con il nome 'readStorage'. WASM: Errore: impossibile trovare la funzione registrata con il nome 'readStorage'.

Cordiali saluti, questo è nel MainLayout.cshtml del progetto boilerplate di Blazor VS.

(può fare una nuova domanda, se del caso, in qualche modo correlata a questa)

Risposta accettata

Per 0.1 è necessario scrivere il proprio interop javascript. Ma credo che questo abbia funzionato, e forse nella versione 0.2.

In alternativa (se non hai bisogno di spazio di archiviazione tra le sessioni) puoi scrivere il tuo singleton, come fatto qui: https://github.com/aspnet/samples/blob/master/samples/aspnetcore/blazor/FlightFinder/FlightFinder. cliente / Servizi / AppState.cs

modificare
C'è un PR aperto per questo, quindi dovrebbe esserci presto: https://github.com/aspnet/Blazor/pull/205

Edit2 0.2 è fatto, ma non ancora locale. Nel frattempo ho sviluppato un pacchetto per questo: BlazorExtensions anche su nuget


Risposta popolare

Potrebbe essere implementato di default in Blazor, ma per ora sto usando: Nuget - BlazorStorage




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché