首页 > 代码库 > MVC的自定义动作过滤器(一)
MVC的自定义动作过滤器(一)
感谢好朋友wolfy在园子里的很多有价值的文章,方便了很多朋友,向榜样学习,开始自己的总结之旅:)
遇到问题:
1.http://q.cnblogs.com/q/67382/#a_150210
//添加自定义过滤器后,Redirect没有终止请求,继续访问了待校验登录权限的View();
filterContext.Controller.ControllerContext.RequestContext.HttpContext.Response.Redirect("/Manage/User");
目前解决方案:
1 public override void OnActionExecuting(ActionExecutingContext filterContext) 2 { 3 4 if (filterContext.Controller.ControllerContext.RequestContext.HttpContext.Session["UserLoginState"] == null) 5 { 6 string firstRquUrl = string.Empty; //记录未登录时访问的Url 7 if (filterContext.Controller.ControllerContext.RequestContext.HttpContext.Request.Url != null) 8 { 9 firstRquUrl = filterContext.Controller.ControllerContext.RequestContext.HttpContext.Request.Url.ToString(); 10 }11 filterContext.Controller.ControllerContext.RequestContext.HttpContext.Session["RawUrl"] = firstRquUrl;12 filterContext.Result = new RedirectResult("/Manage/User");//核心语句13 14 #region 方法115 //filterContext.Controller.ControllerContext.RequestContext.HttpContext.Response.Redirect("/Manage/User");16 //filterContext.Result = new HttpNotFoundResult(); 17 #endregion18 19 }// the end Session["UserLoginState"]==null 20 base.OnActionExecuting(filterContext);21 }
核心语句:
/*通过重定向到指定的 URI 来控制对应用程序操作的处理。*/
filterContext.Result = new RedirectResult("/Manage/User");
原理分析:
1 // 摘要: 2 // 通过重定向到指定的 URI 来控制对应用程序操作的处理。 3 public class RedirectResult : ActionResult 4 { 5 // 摘要: 6 // 初始化 System.Web.Mvc.RedirectResult 类的新实例。 7 // 8 // 参数: 9 // url:10 // 目标 URL。11 //12 // 异常:13 // System.ArgumentNullException:14 // url 参数为 null。15 public RedirectResult(string url);16 }
总结:
虽然目前解决了问题,但有两个问题还是没有理解透
1.//这里讲请求上下文的结果返回而是请求中断么?
filterContext.Result =
2.Response.Redirect 和 new RedirectResult("")的实现原理和页面生命周期是否一样呢
MVC的自定义动作过滤器(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。