首页 > 其他分享 >如何使用 Blazor 保存设置到客户端?

如何使用 Blazor 保存设置到客户端?

时间:2023-06-08 19:22:11浏览次数:34  
标签:Task string await 保存 TValue key Blazor public 客户端

话不多说,直接上代码

  1. 添加服务类, 完整代码比较长,放到文章最后
public interface ICookie
{
    public Task RemoveValue(string key);
    public Task SetValue(string key, string value, int? days = null);
    public Task<string> GetValue(string key, string def = "");
}

public interface IStorage
{
    public Task RemoveValue(string key);
    public Task SetValue<TValue>(string key, TValue value) where TValue : class;
    public Task<TValue?> GetValue<TValue>(string key, TValue? def = null) where TValue : class;
}
  1. 然后在 startup.cs 中添加此服务
services.AddScoped<IStorage, StorageService>();
services.AddScoped<ICookie, CookieService>();
  1. 页面使用
[Inject, NotNull] protected IStorage? Storage { get; set; }
[Inject, NotNull] protected ICookie? Cookie { get; set; }


string Username;

Username = await Storage.GetValue<string>("username");

await Storage.SetValue("username", States.Username);
await Storage.RemoveValue("username");

Username = await Storage.GetValue("username");

await Cookie.SetValue("username", States.Username);
await Cookie.RemoveValue("username");

  1. 服务类代码

LocalStorage

using Microsoft.JSInterop;

public interface IStorage
{
    public Task RemoveValue(string key);
    public Task SetValue<TValue>(string key, TValue value) where TValue : class;
    public Task<TValue?> GetValue<TValue>(string key, TValue? def = null) where TValue : class;
}

public class StorageService : IStorage
{
    readonly IJSRuntime JSRuntime; 

    public StorageService(IJSRuntime jsRuntime)
    {
        JSRuntime = jsRuntime; 
    }

    public async Task SetValue<TValue>(string key, TValue value) where TValue : class
    {
        await JSRuntime.InvokeVoidAsync("eval", $"localStorage.setItem('{key}', '{value}')");
    }

    public async Task<TValue?> GetValue<TValue>(string key, TValue? def) where TValue : class
    {
        var cValue = await JSRuntime.InvokeAsync<TValue>("eval", $"localStorage.getItem('{key}');"); 
        return cValue??def;
    }
    public async Task RemoveValue(string key)
    {
         await JSRuntime.InvokeVoidAsync("eval", $"localStorage.removeItem('{key}')");
    }
     

}

Cookie

using Microsoft.JSInterop;

public interface ICookie
{
    public Task RemoveValue(string key);
    public Task SetValue(string key, string value, int? days = null);
    public Task<string> GetValue(string key, string def = "");
}

public class CookieService : ICookie
{
    readonly IJSRuntime JSRuntime;
    string expires = "";

    public CookieService(IJSRuntime jsRuntime)
    {
        JSRuntime = jsRuntime;
        ExpireDays = 300;
    }

    public async Task SetValue(string key, string value, int? days = null)
    {
        var curExp = (days != null) ? (days > 0 ? DateToUTC(days.Value) : "") : expires;
        await SetCookie($"{key}={value}; expires={curExp}; path=/");
    }

    public async Task<string> GetValue(string key, string def = "")
    {
        var cValue = await GetCookie();
        if (string.IsNullOrEmpty(cValue)) return def;

        var vals = cValue.Split(';');
        foreach (var val in vals)
            if (!string.IsNullOrEmpty(val) && val.IndexOf('=') > 0)
                if (val.Substring(0, val.IndexOf('=')).Trim().Equals(key, StringComparison.OrdinalIgnoreCase))
                    return val.Substring(val.IndexOf('=') + 1);
        return def;
    }
    public async Task RemoveValue(string key)
    {
        await SetCookie($"{key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/");
    }

    private async Task SetCookie(string value)
    {
        await JSRuntime.InvokeVoidAsync("eval", $"document.cookie = \"{value}\"");
    }

    private async Task<string> GetCookie()
    {
        return await JSRuntime.InvokeAsync<string>("eval", $"document.cookie");
    }

    public int ExpireDays
    {
        set => expires = DateToUTC(value);
    }

    private static string DateToUTC(int days) => DateTime.Now.AddDays(days).ToUniversalTime().ToString("R");

}

好了, 你学会了吗?

标签:Task,string,await,保存,TValue,key,Blazor,public,客户端
From: https://www.cnblogs.com/densen2014/p/17467435.html

相关文章

  • git服务器端安装并和客户端git连接
    接下来我们将以Centos为例搭建Git服务器。1、安装Git$yuminstallcurl-develexpat-develgettext-developenssl-develzlib-develperl-devel$yuminstallgit接下来我们创建一个git用户组和用户,用来运行git服务:$groupaddgit$useraddgit-ggit2、创建证......
  • 2、客户端访问ZooKeeper--命令行客户端和图形化客户端访问
    客户端访问命令行客户端访问ZooKeeper安装zookeeper的bin里面,有命令行工具[root@ubuntu2004~]#ls/usr/local/zookeeper/bin/zkCli.sh/usr/local/zookeeper/bin/zkCli.sh里面存的脚本是由java运行起来的#可连接至zookeeper集群中的任意一台zookeeper节点进行以下操作,zkCli......
  • win11邮件客户端添加账户时提示「0x80190001」的替代解决方案
    在「添加账户」时选择「高级设置」:高级设置→Internet电子邮件填写信息账户名和用户名可填写邮箱名。如果是微软的邮箱,可参考:传入邮件服务器:POP3.live.com传出邮件服务器:smtp.live.com账户类型可尝试选:POP3......
  • stm32永久保存一些参数
     如果需要在程序中永久保存一些参数,可以利用STM32的Flash存储器作为自定义存储器区域。在保存参数时,可以将参数按照一定的编码格式打包成一个字节数组(例如采用结构体表示),然后按照一定的规则写入Flash存储器。1、定义参数结构体定义一个结构体存放要保存的参数。例如,假设要保存......
  • 7、hive shell客户端与属性配置、内置运算符、函数(内置运算符与自定义UDF运算符)
    ApacheHive系列文章1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解2、hive相关概念详解--架构、读写文件机制、数据存储3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表4、hive的使用示例详解-事务表、视图、物......
  • 关于大型客户端项目的思考
    大型客户端项目在使用过程中一般会面临几个问题:a.启动慢b.运行慢c.稳定性低基于以上问题进行一些思考,最终总结出该方案.解决方案当项目过大时,需要加载的程序集也越多,对应程序需要启动的时间也越长,如果在这个时候有一个启动的过渡页,从使用的角度看,能在启动后快速看......
  • EasyNTS上云网关现已支持Linux ARM架构客户端
    EasyNTS上云网关管理平台可集中管理所有接入的EasyNTS上云网关设备,实现接入与管控、动态组网、远程运维、文件传输、远程指令调用等功能,从终端到云端,形成了一整套的上云网关解决方案,极大地解决了现场无固定IP、端口不开放、系统权限不开放等问题。在之前的EasyNTS版本中,后台管理页......
  • Linux系统下如何保持进程在SSH客户端断开后仍继续运行?
    使用场景在Linux系统中,在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍两种保障程序在您退出登录后持续运行的方法。方法1:使用nohup命令1.命令格式nohup,可以使运行的命令忽略SIGHUP信号。因此,即使退出登录......
  • flink的状态表需要保存多久
    Flink的状态表保存的时间可以根据应用程序的需求进行配置。状态表的保留时间取决于两个因素:状态后端(StateBackend)的配置:Flink支持不同类型的状态后端,如内存、文件系统、RocksDB等。不同的状态后端可以配置不同的状态保留策略。例如,如果使用基于内存的状态后端,状态表的数据通常......
  • C#操作XML之保存参数
    usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Xml;usingSystem.Xml.Serialization;namespaceXMLtest{publicclassParamH......