You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI&Blazor Windows应用重启后LocalStorage数据丢失问题求助

解决Windows平台MAUI Blazor中Blazored/LocalStorage重启后状态丢失的问题

核心原因

Windows平台的MAUI Blazor默认使用WebView2控件,其默认的用户数据文件夹(包含LocalStorage数据)可能指向临时目录,应用重启后该目录会被系统清理,导致Blazored/LocalStorage存储的状态丢失。

解决方案

1. 配置WebView2的持久化用户数据文件夹

修改MauiProgram.cs,为WebView2指定一个固定的、不会被清理的本地数据目录,确保LocalStorage数据持久化存储:

using Microsoft.Web.WebView2.WinForms;

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .ConfigureFonts(fonts =>
    {
        fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
    });

builder.Services.AddMauiBlazorWebView();
#if DEBUG
builder.Services.AddBlazorWebViewDeveloperTools();
#endif

// 配置WebView2用户数据文件夹到应用本地持久化目录
builder.Services.Configure<BlazorWebViewOptions>(options =>
{
    options.WebView2Options = new WebView2Options
    {
        // 使用应用专属的本地数据目录,避免被系统清理
        UserDataFolder = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
            "YourAppOfficialName",
            "WebView2PersistentData"
        )
    };
});

var app = builder.Build();
app.Run();

说明:

  • Environment.SpecialFolder.LocalApplicationData指向当前用户的本地应用数据目录(如C:\Users\[用户名]\AppData\Local),这个目录不会被系统自动清理
  • 替换YourAppOfficialName为你的应用名称,确保目录唯一性

2. 确认Blazored/LocalStorage的正确使用方式

确保组件中正确注入并异步访问LocalStorage,避免在组件初始化前同步调用导致数据读取失败:

@inject Blazored.LocalStorage.ILocalStorageService LocalStorage
@implements IAsyncDisposable

@code {
    private PageStateModel _currentState = new();

    protected override async Task OnInitializedAsync()
    {
        // 异步读取保存的状态
        var savedState = await LocalStorage.GetItemAsync<PageStateModel>("userPageState");
        if (savedState != null)
        {
            _currentState = savedState;
        }
    }

    // 保存状态的示例方法(可在状态变更时调用)
    private async Task SaveCurrentState()
    {
        await LocalStorage.SetItemAsync("userPageState", _currentState);
    }

    // 可选:确保组件销毁时完成所有未完成的存储操作
    public async ValueTask DisposeAsync()
    {
        await LocalStorage.DisposeAsync();
    }
}

3. 排查系统隐私设置

检查Windows系统的隐私设置,确认是否开启了"关闭应用后自动清理浏览数据":

  • 打开Windows设置 → 隐私和安全性 → 权限和历史记录 → 查看和清除浏览历史记录
  • 确保未勾选针对WebView2相关的自动清理选项(若有)

4. 更新依赖包版本

确保Blazored.LocalStorage和Microsoft.Maui.Controls使用最新稳定版,避免已知的存储兼容性bug。

内容的提问来源于stack exchange,提问作者Echo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:40:59