如何在Blazor中訪問瀏覽器localStorage?

asp.net-core blazor c#

我想支持JWT,所以我需要保留令牌;是否有一些設施可以訪問這個?或者我們現在應該註冊我們自己的javascript函數來訪問此功能?

編輯:根據建議,我嘗試使用JS interop:

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

但是這導致了diag中的WASM錯誤:

WASM:[Microsoft.AspNetCore.Blazor.Browser.Interop.JavaScriptException]找不到名為'readStorage'的已註冊函數。 WASM:錯誤:找不到名為'readStorage'的註冊函數。

僅供參考,這是Blazor VS樣板項目的MainLayout.cshtml。

(如果合適,可以提出一個新的問題;雖然這個問題有點相關)

一般承認的答案

對於0.1,您需要編寫自己的javascript互操作。但我相信這是有效的,也許在0.2版本中。

或者(如果您不需要在會話之間存儲),您可以編寫自己的DI單例,如下所示: https//github.com/aspnet/samples/blob/master/samples/aspnetcore/blazor/FlightFinder/FlightFinder。客戶端/服務/ AppState.cs

編輯
有一個開放的PR,所以確實應該很快就會出現: https//github.com/aspnet/Blazor/pull/205

Edit2 0.2已完成,但尚未進行本地存儲。與此同時,我為此開發了一個包: BlazorExtensions也在nuget上


熱門答案

它可能默認實現為Blazor,但現在我正在使用: Nuget - BlazorStorage




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因