在权限过滤器里设置跳转,有时可以跳转有时无法跳转
代码如下:
public void OnAuthorization(AuthorizationContext filterContext)
{
//var current = JsonConvert.DeserializeObject<CurrentTraderModel>(SessionHelper.GetSession("Fex_CurrentTrader"));
var current = JsonConvert.DeserializeObject<CurrentTraderModel>(CooKies.GetCookies("Fex_CurrentTrader"));
if (current != null)
{
Dictionary<long, string> hOnline = new RedisCache().Get<Dictionary<long, string>>("Online");
if (hOnline != null)
{
if (hOnline[current.LoginNumber] != null)
{
if (current.LoginDateTime != hOnline[current.LoginNumber].ToString())
{
SessionHelper.SetSession("Fex_SingleLogin", "1");
SessionHelper.SetSession("FEX_token_u_t", null);
SessionHelper.SetSession("FEX_t_i_t", null);
SessionHelper.SetSession("FEX_t_i_LoginNumber", null);
SessionHelper.SetSession("BB_First", "0");
CooKies.SetCookies("Fex_CurrentTrader", null);
filterContext.Result = new RedirectResult("/Account/Signin?type=QuitLoginOther");
//filterContext.HttpContext.Response.Write("<script>location.href ='/Account/Signin?type=QuitLoginOther';</script>");
//filterContext.HttpContext.Response.End();
}
}
}
}
}
没什么问题,好好跟一下,看看本函数最终filterContext.Result
???
@花开花落-2014: 上面是只需要设置
filterContext.Result = new RedirectResult("/Account/Signin?type=QuitLoginOther");
所以你看看这个函数结束时,filterContext.Result的值;
当然前提本类是来自 IAuthenticationFilter 哈;
@花飘水流兮: 我是实现IAuthorizationFilter过滤器,不是IAuthenticationFilter
@花飘水流兮: 在本地vs iisexpress测试好多次多可以跳转,更新到测试环境就有时不可以跳转了
filterContext.Result = ...;
这句是放在多重嵌套的if中的。
条件成立,它才有机会被执行,于是跳转了;条件不成立,它不会被执行,于是没跳转。
所以,你要观察、思考、猜测、分析,为什么条件不成立。
条件都成立不一定执行,条件是判断是不是重复登录
session都清空啦,怎么会条件不成立呢
初步怀疑
1 Dictionary<long, string> hOnline = new RedisCache().Get<Dictionary<long, string>>("Online");
这段 redis缓存的数据没拿到
还有给你个建议,优化下你if判断,让人看起来你不是游击队,而是正规军;
你怎么知道没拿到。。。如果没拿到就不会一会儿可以跳,一会额不可以跳。。。怎么优化if
session清空语句都执行啦。怎么会没拿到
建议给代码加上高亮
– dudu 6年前