您的位置:首页 > 其它

MVC的自定义动作过滤器(一)

2014-11-23 12:05 211 查看
感谢好朋友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 方法1
15                 //filterContext.Controller.ControllerContext.RequestContext.HttpContext.Response.Redirect("/Manage/User");
16                 //filterContext.Result = new HttpNotFoundResult();
17                 #endregion
18
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("")的实现原理和页面生命周期是否一样呢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: