过滤器代码
public override void OnActionExecuting(ActionExecutingContext context)
{
try
{
//获取cookies中的WeChatId
//context.HttpContext.Response.Cookies.Delete("WeChatId");
context.HttpContext.Request.Cookies.TryGetValue("WeChatId", out string weChatId);
//当前访问的控制名称
//string controller_Name = context.Controller.GetType().Name.ToLower();
WeChatUser user = null;
if (string.IsNullOrEmpty(weChatId))
{
//如果没有openid,则重新获取
string code = context.HttpContext.Request.Query["code"];
_logger.LogError("微信过来的code"+code);
WebAccessToken token = WeChatBillsTools.GetOpenId(code);
if (token != null)
weChatId = token.openid;
if (string.IsNullOrEmpty(weChatId)) weChatId = "o_XGiuAAEHRnX-mTkRLhc7lRzorQ";
context.HttpContext.Response.Cookies.Append("WeChatId", weChatId);
}
user = _weChatUserService.ValidWeChatUser(weChatId);
//如果未绑定,
if (user == null)
//结束当前直接跳转到登录页面
context.Result = new RedirectResult("/Account/Index");
else
{
//如果取到数据了,就放入cookie
UsersModel userCookie = new UsersModel
{
WeChatId = weChatId,
UserId = user.UserID,
LabCode = user.LabCode,
LogId = user.LogID,
LogPwd = user.PassWord,
Nickname = user.Nickname,
DeptId = user.DeptID,
DeptName = user.DeptName,
Tel = user.Tel,
UserType = user.UserType
};
context.HttpContext.Response.Cookies.Delete(weChatId + "Token");
context.HttpContext.Response.Cookies.Append(weChatId + "Token", Common.Extension.SerializerJson.SerializeObject(userCookie));
}
}
catch (Exception ex)
{
throw ex;
}
base.OnActionExecuting(context);
}
登录完成后
///
///
///
///
[ServiceFilter(typeof(MyActionFilterAttribute))]
public IActionResult Index()
{
string wechatId = GetCookies("WeChatId");
TempData["user"] = SerializerJson.DeserializeObject<UsersModel>(GetCookies(wechatId + "Token"));
return View();
}
这里第一次进来读不到Cookie信息 ,需要刷新一下才有。