using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using VueWebCoreApi.Models;
namespace VueWebCoreApi.Tools
{
public class ChannelActionFilterAttribute: ActionFilterAttribute
{
ToMessage mes = new ToMessage();
RedisCommon redis = new RedisCommon();
///
/// 在Action执行前执行
///
///
public override void OnActionExecuting(ActionExecutingContext context)
{
try
{
//var aa = DapperHelper.GetTokenFromRequestHeader();
var token = context.HttpContext.Request.Headers["Token"].ToString();
User us = JwtTools.Denocode(token.ToString());
base.OnActionExecuting(context);
//如果存在
if (redis.GetStringKey(us.rediskey) !=null)
{
//获取redis中当前用户信息
User r_loginUser = redis.GetStringKey(us.rediskey);
if (token != r_loginUser.token)
{
mes.code = "303";
mes.count = 0;
mes.message = "token已过期,请重新登录!";
context.Result = new JsonResult(mes);
}
else
{
//重置过期时间
redis.SetExpire(us.rediskey, redis.secondsTimeOut);
}
}
else //如果redis登录用户中不存在当前用户
{
mes.code = "303";
mes.count = 0;
mes.message = "登录已超时,请重新登录!";
context.Result = new JsonResult(mes);
}
// 将过滤器中的值存储在HttpContext.Items中,以便在控制器中访问
//context.HttpContext.Items.Remove("Token");
//context.HttpContext.Items["Token"] = token;
}
catch (Exception e)
{
LogHelper.WriteLog(e);
mes.code = "303";
mes.message = e.Message;
context.Result = new JsonResult(mes);
}
}
}
}