我有一个属性SessionEndAttribute,用于检查会话是否处于活动状态。它附在每个动作上。
如果会话已过期,则会运行此方法:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
// do logout, clear cookies
filterContext.Result = new RedirectToRouteResult( .. )
}
但有时响应不是通往新页面的路径(例如路线“/帐户/登录”),而只是弹出窗口或部分视图,它可能只是一个容器div。
所以,问题是 - 我怎样才能始终重定向到新页面?
答案 0 :(得分:0)
您必须告诉此特定的actionfilter仅运行完整的控制器操作而不是部分控制器操作[ChildActionOnly]
。
您还必须确保所有AJAX调用都使用[ChildActionOnly]
调用。
有should be a boolean property in the context,IsChildAction
可以帮助您。
正如Andriy在评论中指出的那样,您还应该使用filterContext
检查并确保ifilterContext.HttpContext.Request.IsAjaxRequest()
没有执行AJAX请求
用法:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
// do logout, clear cookies
if (!filterContext.IsChildAction && !filterContext.HttpContext.Request.IsAjaxRequest()) {
filterContext.Result = new RedirectToRouteResult( .. )
}
}