Wie kann ich auf den Browser localStorage in Blazor zugreifen?

asp.net-core blazor c#

Frage

Ich möchte JWTs unterstützen, also muss ich das Token behalten. Gibt es eine Möglichkeit, um darauf zuzugreifen? Oder sollten wir gerade unsere eigene JavaScript-Funktion registrieren, um auf diese Funktion zugreifen zu können?

Edit: per Beratung habe ich versucht, JS interop als:

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

Dies führt jedoch zu einem WASM-Fehler in diag:

WASM: [Microsoft.AspNetCore.Blazor.Browser.Interop.JavaScriptException] Konnte die registrierte Funktion mit dem Namen 'readStorage' nicht finden. WASM: Fehler: Konnte die registrierte Funktion mit dem Namen 'readStorage' nicht finden.

FYI, das ist in der MainLayout.cshtml des Blazor VS Boilerplate-Projekts.

(kann eine neue Frage stellen, wenn es angemessen ist; etwas verwandt mit dieser jedoch)

Akzeptierte Antwort

Für 0.1 müssen Sie Ihre eigene Javascript Interop schreiben. Aber ich glaube, das ist etwas, an dem gearbeitet wurde, und vielleicht in der Version 0.2.

Alternativ (wenn Sie zwischen den Sitzungen keinen Speicher benötigen) können Sie Ihren eigenen DI-Singleton schreiben, wie hier: https://github.com/aspnet/samples/blob/master/samples/aspnetcore/blazor/FlightFinder/FlightFinder. Client / Dienste / AppState.cs

Bearbeiten
Dafür gibt es eine offene PR, also sollte es bald soweit sein: https://github.com/aspnet/Blazor/pull/205

Edit2 0.2 ist fertig, aber noch keine lokale Speicherung . In der Zwischenzeit habe ich ein Paket dafür entwickelt: BlazorExtensions auch auf nugget


Beliebte Antwort

Es könnte standardmäßig in Blazor implementiert werden, aber ich verwende jetzt: Nuget - BlazorStorage



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum