zoukankan      html  css  js  c++  java
  • 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 方法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("")的实现原理和页面生命周期是否一样呢

  • 相关阅读:
    利用子查询解决复杂sql问题
    如何用临时表代替游标进行表记录的拷贝
    SQL新函数, 排名函数 ROW_NUMBER(), RANK(), DENSE_RANK()
    SQL SERVER2005 中的错误捕捉与处理
    用户自定义函数代替游标进行循环拼接
    使用游标进行循环数据插入
    Oracle中利用存储过程建表
    SQL SERVER中强制类型转换cast和convert的区别
    SQL如何修改被计算字段引用的字段类型
    1.官方网站:http://www.mplayerhq.hu/design7/dload.html
  • 原文地址:https://www.cnblogs.com/Frank0400/p/4116333.html
Copyright © 2011-2022 走看看