MVC中的布局页中判定session是否过期跳转

Guy_Fwakes 2018-04-22 12:23:35
基本情况介绍
1 _Layout.cshtml中使用
 @Html.Action("_Sidebar", "Common");

动态生成菜单

2 菜单生成方法对应的代码

//使用过滤器判断session
[CheckLoginFilter]
public ActionResult _SideBar()
{
List<INFO_Form> list = new List<INFO_Form>();
INFO_USER _user = Session["CurrentUser"] as INFO_USER;
list = GetFormByUser(_user);
return PartialView(new SiderBarViewModel() { Forms = list, User = _user });
}


3 过滤器代码

public class CheckLoginFilterAttribute : AuthorizeAttribute,IAuthorizationFilter
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// base.OnAuthorization(filterContext);
if(filterContext.HttpContext.Session["CurrentUser"] == null)
{
filterContext.Result = new RedirectResult("~/Login.html");
}
}

}


问题:
1 我想要尝试在业务页面bll/index.cshtml(使用_layout.cshtml作为布局页)加载之前判断session是否过期,做了以下两个方面的尝试

1.1 在bllController的index的action之前添加自定义过滤器 [CheckLoginFilter],发现页面菜单加载在_layout.cshtml中就开始了,也就说布局页的渲染要比子页面的早,失败

1.2 我尝试在动态生成菜单分布页方法CommonController/_Siderbar的action添加 [CheckLoginFilter],手动测试seesion过期的情况,发现报错,不允许子操作执行重定向操作,查询得知模板页渲染之后不允许跳转,失败

因此我想问一下各位有没有能够提供其他的思路实现?


...全文
935 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanglong_longlong 2018-04-26
  • 打赏
  • 举报
回复
或者在基类里面做下,或者全局过滤器
LinuxCard 2018-04-24
  • 打赏
  • 举报
回复
了解下全局过滤器 AuthorizeAttribute
mirrorspace 2018-04-23
  • 打赏
  • 举报
回复
可以用MVC自带的特性 [Authorize] 表单认证,认证不过时会跳那个登录地址,在webconfig里设置 2.如果要自己弄的话 也是写一个类似的特性. 你可以试试返回一个正常的套用母版页的VIEW,而不是一个PARTIALVIEW.

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧