在刚学mvc的时候 我一开始随便的做了拦截跳转,这样也实现了跳转 表面看起来完全没问题!
if (filterContext.HttpContext.Session[“userId”] == null)
{
filterContext.HttpContext.Response.Redirect("~/LoginContent/Login", true);
}
但是某一天,突然调试了一下发现这个跳转 并不是及时的,而是会等把index的这个 action 执行,视图加载完毕才跳转!也是就是类似 在asp.net webform 里面 使用javascript做跳转!必须等到页面加载完毕,才会跳转!这样也就意味的 根本没有进行拦截!
if (filterContext.HttpContext.Session[“userId”] == null)
{
filterContext.Result = new RedirectResult("~/LoginContent/Login");
base.OnActionExecuting(filterContext);
}
就把一句话进行改变,结果却与众不同!
if (filterContext.HttpContext.Session[“userId”] == null)
{
filterContext.Result = new RedirectResult("~/LoginContent/Login");
base.OnActionExecuting(filterContext);
}
就把一句话进行改变,结果却与众不同!
public class ExceptionFillters : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
throw new System.NotImplementedException();
}
}
public class ActionFillters : FilterAttribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Session == null) return;
var token = filterContext.RequestContext.HttpContext.Session["userId"];
if (token == null)
{
filterContext.RequestContext.HttpContext.RedirectLocal("/Role/LoginHome");
}
//执行action后执行这个方法 比如做操作日志
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//执行action前执行这个方法,比如做身份验证
}
}
public class ResultFillters : FilterAttribute, IResultFilter
{
public void OnResultExecuted(ResultExecutedContext filterContext)
{
//执行完action后跳转后执行
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
//执行完action后跳转前执行
}
}