1.过滤器

《a》:Authorization 默认实现 AuthorizeAttribute身份验证过滤器,首先运行,在其他过渡器的操作操作方法前执行;
《b》:Action 运行之前 和之后的动作方法;

 public class MyAction:ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
//base.OnResultExecuting(filterContext);
filterContext.HttpContext.Response.Write("视图执行前 <br>");
} public override void OnResultExecuted(ResultExecutedContext filterContext)
{
// base.OnResultExecuted(filterContext);
filterContext.HttpContext.Response.Write("视图执行后 <br>");
} //表示行为处理前,需要执行的代码
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//base.OnActionExecuting(filterContext);
filterContext.HttpContext.Response.Write("行为处理前 <br>");
}
//表示行为处理后,需要执行的代码
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
//base.OnActionExecuted(filterContext);
filterContext.HttpContext.Response.Write("行为处理后 <br>");
}
}

《c》:Result 运行前后执行的操作结果;
《d》:Exception 如果只运行另一个过渡器,操作方法或行动结果抛出一个异常。

两种实现方式:第一种自定义类实现类AuthorizeAttribute 重写方法

public class MyAuthorization : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
//如果保留,则会运行.net framework自已定义 好的身份验证; 如果希望走自己定义的身份验证,则删除如下代码。
// base.OnAuthorization(filterContext); //如果希望跳转到另外一个页面,需要使用filterContext.Result, 而不是使用filterContext.HttpContext.Response.Redirect("");因为Redirect不会使服务器停止。
// filterContext.HttpContext.Response.Redirect("");
// filterContext.Result = new RedirectResult(UrlHelper.GenerateUrl("","Login","UserInfo")); filterContext.HttpContext.Response.Write(""); //路由信息
//filterContext.RouteData //校验用户是否登陆 //var routeDictionary = new System.Web.Routing.RouteValueDictionary { { "action", "Login" }, { "controller", "Account" } }; //filterContext.Result = new RedirectToRouteResult(routeDictionary); }
}

然后在控制器的方法中添加该特性如下:

 // [MyAuthorization]  //表示当前类下面的所有行为在执行前都要  执行身份验证过滤器。
public class HomeController : Controller
{
//
// GET: /Home/ [MyAuthorization] //表示当前行为在执行前执行身份验证过滤器。
public ActionResult Index()
{
return View();
}
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("");
}
}

该特性有 三种添加方法:1:直接在方法上添加特性,2:在控制器上添加,

3:在Global的 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);中添加如下:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//在全局中注册过滤器,那么所有的控制器的的所有行为都要执行该 过渡器
// filters.Add(new MyAuthorization());
}

//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:

   // [MyAuthorization]  //表示当前类下面的所有行为在执行前都要  执行身份验证过滤器。
public class HomeController : Controller
{
//
// GET: /Home/ [MyAuthorization] //表示当前行为在执行前执行身份验证过滤器。
public ActionResult Index()
{
return View();
}
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("");
}
}

或者是新建一个控制器,添加过渡器的方法再使想应用该 过渡器的控制器 继承于该控制器:

namespace t1_Filter.Controllers
{
public class MyBaseController : Controller
{
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("");
}
}
}
  public class HomeController : MyBaseController

MVC之过滤器的更多相关文章

  1. 使用ASP.NET MVC操作过滤器记录日志(转)

    使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...

  2. 爱上MVC系列~过滤器实现对响应流的处理

    回到目录 MVC的过滤器相信大家都用过,一般用来作权限控制,因为它可以监视你的Action从进入到最后View的渲染,整个过程ActionFilter这个过滤器都参与了,而这给我们的开发带来了更多的好 ...

  3. ASP.NET MVC : Action过滤器(Filtering)

    http://www.cnblogs.com/QLeelulu/archive/2008/03/21/1117092.html ASP.NET MVC : Action过滤器(Filtering) 相 ...

  4. MVC 自定义过滤器/特性来实现登录授权及验证

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    最近在做自学MVC,遇到的问题很多,索性一点点总结 ...

  5. [翻译] 使用ASP.NET MVC操作过滤器记录日志

    [翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...

  6. MVC 授权过滤器 AuthorizeAttribute

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

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

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

  8. mvc全局过滤器和httpmodule的执行顺序

    根据http管线模型,请求先通过httpmodule,再通过httphandler,之后再进入mvc的过滤器 另外参考:MVC如何在Pipeline中接管请求的? http://www.cnblogs ...

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

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

  10. ASP.NET MVC动作过滤器

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

随机推荐

  1. rem 与 px 手机页面自适应

    rem相对于根元素html的,em相对于父元素的.rem和em相对大小的值默认情况下如果你没有在根元素指定参照值,那浏览器默认就是 1rem 为 16px,如果你指定了值假设为 20px,那 1rem ...

  2. PHP 类中的魔术方法

    定义: PHP类中以两个下画线“__”开头的方法被称为魔术方法. 分类: 例如:构造方法:__construct:析构方法:__destruct:动态重载:__set().__get().__call ...

  3. c++宏使用总结【转】

    C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境. ANSI标准定义的C语言预处理程序包括下列命令:  #de ...

  4. java中的反射,知道类名创建类,还可以设置私有属性的值

    刚刚学到了反射,感觉反射的功能好强大,所以想写篇博客记录下自己的学习成果. 利用反射来创建对象. Class c1=Class.forName("test.Person");//通 ...

  5. C++结构、共用体、枚举

    一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...

  6. 使用keepalived实现mysql主从复制的自动切换

    最近测试了一下mysql+keepalived实现主从自动切换,主从都需要安装keepalived,使用vip漂移实现主从自动切换,这里主要记录的是keepalived的文件配置. 这里mysql搭建 ...

  7. 将 Shiro 作为应用的权限基础

    Shiro 是 Java 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势.本文介绍了 Shiro 的 ...

  8. 解决ie6下不支持fix属性,模拟固定定位

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. 使用spring连接及操作mongodb3.0

    前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb.   maven导包配置: ...

  10. Android线程间通信更新UI的方法(重点分析EventBus)

    Android的UI更新只能在UI线程中,即主线程.子线程中如果要进行UI更新,都是要通知主线程来进行. 几种实现方式总结如下,欢迎补充. 1.runOnUiThread() 子线程中持有当前Acti ...