C# 操作Redis
关于Redis的安装和使用可以看本人Redis系列,这里就不在赘述了。
这里主要是C#操作redis。
1.在VS中利用NuGet安装ServiceStack.Redis,这是微软提供已经封装好的对redis操作类。包含4个dll

2.自定义redis操作类 redisHelp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.model
{
/// <summary>
/// Redis操作类
/// </summary>
public class redisHelp
{
public static ServiceStack.Redis.RedisClient client = new ServiceStack.Redis.RedisClient("127.0.0.1", 6379);
/// <summary>
/// 获取
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string getValue(string key)
{
return client.Get<string>(key);
}
/// <summary>
/// 添加
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void setVaule(string key,string value)
{
client.Set<string>(key,value);
}
}
}
3.测试数据插入和读取
using JWT.MvcDemo.Help;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using WebApplication1.model;
namespace JWT.MvcDemo.App_Start
{
public class MyAuthorizeAttribute : AuthorizeAttribute
{
private readonly string TimeStamp = ConfigurationManager.AppSettings["TimeStamp"];
/// <summary>
/// 验证入口
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
/// <summary>
/// 验证核心代码
/// </summary>
/// <param name="httpContext">fbc8ZBLd5ZbtCogcY9NUVV4HZbPln1lb</param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
redisHelp client = new redisHelp();
//前端请求api时会将token存放在名为"auth"的请求头中
var authHeader = httpContext.Request.Headers["auth"];
if (authHeader == null)
return false;
//请求参数
string requestTime = httpContext.Request["rtime"]; //请求时间经过DESC签名
if (string.IsNullOrEmpty(requestTime))
return false;
//模拟生成rtime 时间戳,即登录的时间,加密.
string r= DESCryption.Encode(DateTime.Now.ToString());
requestTime = r;
//插入redis
client.setVaule(authHeader + ".rtime", r); //登录时间
client.setVaule(authHeader+".UserName", "admin");//登录账号
client.setVaule(authHeader + ".Pwd", "123");//登录密码
//请求时间RSA解密后加上时间戳的时间即该请求的有效时间
DateTime Requestdt = DateTime.Parse(DESCryption.Decode(requestTime)).AddMinutes(int.Parse(TimeStamp));
DateTime Newdt = DateTime.Now; //服务器接收请求的当前时间
if (Requestdt < Newdt)
{
return false;
}
else
{
if (authHeader != null)
{
//进行其他操作
var userinfo = JwtHelp.GetJwtDecode(authHeader);
//举个例子 生成jwtToken 存入redis中
//这个地方用jwtToken当作key 获取实体val 然后看看jwtToken根据redis是否一样
string UserName = client.getValue(authHeader + ".UserName");
string Pwd= client.getValue(authHeader + ".Pwd");
if (userinfo.UserName == UserName && userinfo.Pwd == Pwd)
return true;
}
}
return false;
}
/// <summary>
/// 验证失败处理
/// </summary>
/// <param name="filterContext"></param>
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.Result = new RedirectResult("/Error");
filterContext.HttpContext.Response.Redirect("/Home/Error");
}
}
}



浙公网安备 33010602011771号