C#基础之Filterfilter跳转的使用

it2023-07-05  71

在刚学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后跳转前执行 } }
最新回复(0)