感谢好朋友wolfy在园子里的很多有价值的文章,方便了很多朋友,向榜样学习,开始自己的总结之旅:)

遇到问题

1.http://q.cnblogs.com/q/67382/#a_150210

//添加自定义过滤器后,Redirect没有终止请求,继续访问了待校验登录权限的View();

filterContext.Controller.ControllerContext.RequestContext.HttpContext.Response.Redirect("/Manage/User");

目前解决方案

     public override void OnActionExecuting(ActionExecutingContext filterContext)
{ if (filterContext.Controller.ControllerContext.RequestContext.HttpContext.Session["UserLoginState"] == null)
{
string firstRquUrl = string.Empty; //记录未登录时访问的Url
if (filterContext.Controller.ControllerContext.RequestContext.HttpContext.Request.Url != null)
{
firstRquUrl = filterContext.Controller.ControllerContext.RequestContext.HttpContext.Request.Url.ToString();
}
filterContext.Controller.ControllerContext.RequestContext.HttpContext.Session["RawUrl"] = firstRquUrl;
filterContext.Result = new RedirectResult("/Manage/User");//核心语句 #region 方法1
//filterContext.Controller.ControllerContext.RequestContext.HttpContext.Response.Redirect("/Manage/User");
//filterContext.Result = new HttpNotFoundResult();
#endregion }// the end Session["UserLoginState"]==null
base.OnActionExecuting(filterContext);
}

核心语句:
/*通过重定向到指定的 URI 来控制对应用程序操作的处理。*/ 

filterContext.Result = new RedirectResult("/Manage/User");

原理分析:

      // 摘要:
// 通过重定向到指定的 URI 来控制对应用程序操作的处理。
public class RedirectResult : ActionResult
{
// 摘要:
// 初始化 System.Web.Mvc.RedirectResult 类的新实例。
//
// 参数:
// url:
// 目标 URL。
//
// 异常:
// System.ArgumentNullException:
// url 参数为 null。
public RedirectResult(string url);
}

总结

虽然目前解决了问题,但有两个问题还是没有理解透

1.//这里讲请求上下文的结果返回而是请求中断么?

filterContext.Result =

2.Response.Redirect 和 new RedirectResult("")的实现原理和页面生命周期是否一样呢

MVC的自定义动作过滤器(一)的更多相关文章

  1. 笨鸟先飞之ASP.NET MVC系列之过滤器(03动作过滤器过滤器)

    概念介绍 动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行. 如果我们需要创建动作过滤器需要实现IActionFilter接口. 我们看到该接口里有两 ...

  2. Asp.Net MVC学习总结之过滤器详解(转载)

    来源:http://www.php.cn/csharp-article-359736.html   一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...

  3. asp.net MVC之 自定义过滤器(Filter) - shuaixf

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以 ...

  4. asp.net MVC之 自定义过滤器(Filter)

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  5. 实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

    MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Fi ...

  6. ASP.NET MVC动作过滤器

    ASP.NET MVC提供了4种不同的动作过滤器(Aciton Filter). 1.Authorization Filter 在执行任何Filter或Action之前被执行,用于身份验证 2.Act ...

  7. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  8. MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

    实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器 MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过A ...

  9. MVC过滤器:自定义操作过滤器

    一.操作过滤器 1.定义 操作过滤器用于实现IActionFilter接口以及包装操作方法执行.IActionFilter接口声明两个方法:OnActionExecuting和OnActionExec ...

随机推荐

  1. 我现在的vimrc配置文件

    runtime! debian.vim "设置编码 set encoding=utf- set fencs=utf-,ucs-bom,shift-jis,gb18030,gbk,gb2312 ...

  2. MAXIMO-修改菜单

    MAXIMO菜单修改 模块: select * from MAXMODULES; -- 查询模块 一级菜单(应用程序):  select * from MAXMENU where MENUTYPE=' ...

  3. 用EXCEL内嵌的Visual Basic for Application 编程,通过 UGSimple USB-GPIB 控制器来驱动仪器34401A,并从34401A读取数据

    现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线. 每种GPIB控制器都有它的 函数库(dll库).各种GPIB 控制器的价钱插别很大.这里以一种价钱较便宜的USB-GPIB ...

  4. editplus工具支持sql高亮提示

    editplus默认不识别sql关键件,添加文件使其对sql高亮提示. 首先就是要自己编写一段代码,存为.stx 文件(例如sql.stx) 然后在editplus的菜单栏 工具-> 配置用户工 ...

  5. "递归"实现"约瑟夫环","汉诺塔"

    一:约瑟夫环问题是由古罗马的史学家约瑟夫提出的,问题描述为:编号为1,2,-.n的n个人按顺时针方向围坐在一张圆桌周围,每个人持有一个密码(正整数),一开始任选一个正整数作为报数上限值m,从第一个人开 ...

  6. 自动获取MyEcilipse注册名和注册码的方法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //在MyEc ...

  7. 一个简单的零配置命令行HTTP服务器

    http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不想重复的写 nodeJs 的 web-server.js, 则可以使用这个. 安装 (全局安装加 -g) ...

  8. PHP开发网站之微信登录、绑定

    )))刷新access_token()); ); ); curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curlo ...

  9. 【原】jQuery与CSS自动生成验证码

    模板: <button class="r receive_code">获取验证码</button> <span class="r code& ...

  10. seajs的CMD模式的优势以及使用

    之前有一篇博客非常详细的介绍了sea.js的加载流程,以及源代码实现,链接地址:http://www.cnblogs.com/chaojidan/p/4123980.html 这篇博客我主要讲下sea ...