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("")的实现原理和页面生命周期是否一样呢

时间: 2024-11-05 17:28:03

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

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

一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以秒为单位 ,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回. VaryByParam :以哪个字段为标识来缓存数据,比如当"ID"字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID".这里你可以设置以下几

[转]MVC之 自定义过滤器(Filter)

本文转自:http://www.cnblogs.com/kissdodog/archive/2013/01/21/2869298.html 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttribute类的方法签名. //表示所有操作-筛选器特性的基类. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inh

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

MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Filter我们不得不去单独的Controller或者Action去定义 如图: 那么问题来了,我现在想在FitlerConfig里面去维护所有的过滤器,但是又想实现自定义的过滤器该咋搞,MVC默认不支持! 我们先来看看,MVC默认的Fitlers注册是怎样的官方源码:GlobalFilterColle

MVC过滤器:自定义授权过滤器

一.授权过滤器 授权过滤器用于实现IAuthorizationFilter接口和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全策略.AuthorizeAttribute类继承了IAuthorizationFilter接口,是授权过滤器的示例.授权过滤器在任何其他过滤器之前运行. 如果要自定义授权过滤器,只需要定义一个类继承自AuthorizeAttribute类,然后重写AuthorizeAttribute类里面的方法即可. 二.示例 下面根据一个具体的案例来讲解如何使用自定义

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

一.操作过滤器 1.定义 操作过滤器用于实现IActionFilter接口以及包装操作方法执行.IActionFilter接口声明两个方法:OnActionExecuting和OnActionExecuted.OnActionExecuting在操作方法之前运行.OnActionExecuted在操作方法之后运行,可以执行其他处理,如向操作方法提供额外数据.检查返回值或取消执行操作方法. 查看ActionFilterAttribute类的定义: #region 程序集 System.Web.Mv

asp.net core MVC 过滤器之ActionFilter过滤器(二)

本系类将会讲解asp.net core MVC中的内置过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFilter过滤器(三) asp.net core MVC 过滤器之ResourceFilter过滤器(四) asp.net core MVC 过滤器之AuthorizationFilter过滤器

模型绑定 动作过滤器

mvc中同坐模型绑定model binding 达到解析客户端传来的数据,而解析的工作交给DefaultModelBinder类别处理. 1,简单模型绑定:当网页上有个窗体,且窗体内有个名为Username的输入字段,而Action的参数也定义了一个名为Username的参数,只要窗体的域名与action方法上的参数名称一样,那么Action在被运行的时候就会通过DefaultModelBinder类别将窗体或QueryString传来的数据进行处理,将原本传来的字串数据转换成对应的net型别并

MVC异常处理的7大场景 + MVC的异常处理的过滤器 + 全局异常

1.MVC中捕获异常的过滤器属性时[HandleError] 2. 可以扩展这个属性来捕获异常 3.注册这个过滤器 4.Mvc的异常捕获时:Filter + 全局异常捕获 5.异常处理的7大场景 /// <summary> /// 异常处理在MVC中可以用过滤器属性[HandleError]实现--->利用Aop扩展这个属性 /// /// 自定义异常处理--标记到方法---出现异常惠静如Filter---完成善后处理 /// /// /// 全局注册的异常处理的Filter,7大场景会

自定义jinja2 过滤器

今天,我们要讲的是自定义jinja2 过滤器这个知识点,因为官方文档对此一代而过,讲得不够清楚,所以我们专门拿出来讲一下. 例子 例子写了两个自定义过滤器,一个是转换字典到字符串的过滤器,一个是返回当前参数的类型的过滤器. 源代码: https://github.com/lewis617/jinja2-filter filter是个函数 filter是个函数,跟angular的过滤器几乎一模一样.参数就是管道(pipe)前面那个变量.比如   123|myfilter,123就是myFilter