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

.NET 8下MAUI LocalStorage失效,会话信息无法持久化求助

.NET 8 MAUI 升级后 LocalStorage 会话丢失的排查方案

针对你升级到.NET 8后MAUI应用最小化会话丢失的问题,分享几个实际排查和解决的方向:

  • 确认LocalStorage服务注册与调用时机
    .NET 8对MAUI的Blazor集成有细节调整,检查Program.cs中是否正确注册了LocalStorage服务:

    builder.Services.AddBlazorWebView();
    builder.Services.AddLocalStorageServices(); // 部分模板升级后可能遗漏这行注册
    

    同时避免在应用生命周期早期(如页面构造函数)调用LocalStorage,建议在OnInitializedAsync这类异步生命周期方法中执行读取操作。

  • 处理应用后台生命周期事件
    应用最小化进入后台时,部分平台会限制WebView相关的存储操作,建议主动在OnSleep事件中持久化会话数据,在OnResume时重新读取:

    protected override async void OnSleep()
    {
        base.OnSleep();
        // 主动保存当前用户信息到LocalStorage
        if (CurrentUser != null)
        {
            await storage.SetItemAsync(LocalStorageKey.UserInfo, CurrentUser);
        }
    }
    

    同时检查OnResume逻辑中是否存在误清空LocalStorage的代码。

  • 排查序列化/反序列化异常
    .NET 8的System.Text.Json默认行为有变更,比如对私有构造函数、未标记属性的处理更严格。确保UserInfo类有无参公共构造函数,且所有需要序列化的属性都是公共可读写的;如果包含复杂类型属性,需添加[JsonInclude]标记或自定义转换器。
    可以显式指定序列化选项来兼容旧数据:

    var userInfo = await storage.GetItemAsync<UserInfo>(
        LocalStorageKey.UserInfo,
        new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
    );
    
  • 改用MAUI原生Preferences存储会话
    LocalStorage本质是WebView的缓存机制,移动端持久化小数据推荐使用MAUI原生的Preferences,它的持久化可靠性更高,不受WebView缓存回收影响:

    // 保存用户信息
    var userJson = JsonSerializer.Serialize(CurrentUser);
    Preferences.Set(LocalStorageKey.UserInfo, userJson);
    
    // 读取用户信息
    var userJson = Preferences.Get(LocalStorageKey.UserInfo, null);
    if (!string.IsNullOrEmpty(userJson))
    {
        CurrentUser = JsonSerializer.Deserialize<UserInfo>(userJson);
    }
    
  • 清理旧缓存数据
    升级后旧的存储缓存可能与.NET 8的新格式冲突,先卸载应用、清除模拟器/真机的应用数据,再重新部署测试,排除缓存干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:00:08