Comment puis-je accéder aux navigateurs localStorage dans Blazor?

asp.net-core blazor c#

Question

Je veux soutenir les JWT, je dois donc garder le jeton autour de moi; y a-t-il une installation pour y accéder? Ou devrions-nous simplement enregistrer notre propre fonction javascript pour accéder à cette fonctionnalité pour le moment?

Edit: par conseil, j'ai essayé d'utiliser JS interop comme:

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

Mais cela entraîne une erreur WASM dans diag:

WASM: [Microsoft.AspNetCore.Blazor.Browser.Interop.JavaScriptException] Impossible de trouver une fonction enregistrée avec le nom 'readStorage'. WASM: Erreur: Impossible de trouver la fonction enregistrée avec le nom 'readStorage'.

Pour votre information, cela se trouve dans le fichier MainLayout.cshtml du projet standard Blazor VS.

(peut créer une nouvelle question si nécessaire; un peu en rapport avec celle-ci cependant)

Réponse acceptée

Pour 0.1, vous devez écrire votre propre interop javascript. Mais je crois que c'est quelque chose qui a fonctionné, et peut-être dans la version 0.2.

Alternativement (si vous n'avez pas besoin de stockage entre les sessions), vous pouvez écrire votre propre singleton DI, comme c'est le cas ici: https://github.com/aspnet/samples/blob/master/samples/aspnetcore/blazor/FlightFinder/FlightFinder. Client / Services / AppState.cs

modifier
Il y a un PR ouvert pour cela, alors en fait il devrait être bientôt là: https://github.com/aspnet/Blazor/pull/205

Edit2 0.2 est terminé, mais pas encore de stockage local. En attendant, j'ai développé un paquet pour cela: BlazorExtensions aussi sur nuget


Réponse populaire

Il peut être implémenté par défaut dans Blazor mais pour l'instant j'utilise: Nuget - BlazorStorage




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi