NET MVC过滤器

时间:2022-09-03 20:54:52

NET MVC过滤器

本系列目录:ASP.NET MVC4入门到精通系列目录汇总

在ASP.NET MVC中有四种过滤器类型

aaarticlea/png;base64,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" alt="" />

Action

1、在ASP.NET MVC项目中,新建文件夹Filter,然后新建类MyCustormFilter,继承自ActionFilterAttribute类,我们来看下ActionFilterAttribute类有如下四个方法,从命名我应该就可以看出他们的执行时机。

NET MVC过滤器

NET MVC过滤器
  public class MyCustormFilter:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("Action执行前");
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("Action执行后");
base.OnActionExecuted(filterContext);
}
}
NET MVC过滤器

2、对于过滤器,我们可以把它们加在三个地方,一个是控制器上面(控制器下面的所有Action),一个是Action上面(指定标识的Action),另一个就是全局位置(所有控制器中的Action)。这里我只演示在Action上面加

NET MVC过滤器
       [MyCustormFilter]
        public ActionResult Index()
        {
            return View();
        }
       public ActionResult Index1()
       {
           return View();
}   
NET MVC过滤器

3、build然后运行

NET MVC过滤器NET MVC过滤器

Result

1、新建类TestResultFilter,继承ActionFilterAttribute

NET MVC过滤器
  public class TestResultFilter:ActionFilterAttribute
{
/// <summary>
/// 加载 "视图" 前执行
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("加载视图前执行 OnResultExecuting <br/>");
base.OnResultExecuting(filterContext);
} /// <summary>
/// 加载"视图" 后执行
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("加载视图后执行 OnResultExecuted <br/>");
base.OnResultExecuted(filterContext);
}
}
NET MVC过滤器

2、这里我把TestResultFilter过滤器加在控制器上面

NET MVC过滤器
  [TestResultFilter]
public class FilterTestController : Controller
{
[MyCustormFilter]
public ActionResult Index()
{
return View();
}
public ActionResult Index1()
{
return View();
}
}
NET MVC过滤器

3、运行看下结果

NET MVC过滤器NET MVC过滤器

注意:Result过滤器,无论Action的返回类型为什么(甚至void)都将执行。

RouteData中保存了当前请求匹配的路由信息和路由对象

修改MyCustormFilter.cs

NET MVC过滤器
 public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//1.获取获取请求的类名和方法名
string strController = filterContext.RouteData.Values["controller"].ToString();
string strAction = filterContext.RouteData.Values["action"].ToString();//2.另一种方式 获取请求的类名和方法名
string strAction2 = filterContext.ActionDescriptor.ActionName;
string strController2 = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; filterContext.HttpContext.Response.Write("Action执行前</br>");
filterContext.HttpContext.Response.Write("控制器:" + strController + "</br>");
filterContext.HttpContext.Response.Write("控制器:" + strController2+"</br>");
filterContext.HttpContext.Response.Write("Action:" + strAction + "</br>");
filterContext.HttpContext.Response.Write("Action:" + strAction2 + "</br>");
base.OnActionExecuting(filterContext);
}
NET MVC过滤器

NET MVC过滤器

AuthorizeAttribute

1、  新建TestAuthorizeAttribute

NET MVC过滤器
    /// <summary>
/// 授权过滤器 --在Action过滤器前执行
/// </summary>
public class TestAuthorizeAttribute:AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("<br/>OnAuthorization<br/>");
//注释掉父类方法,因为父类里的 OnAuthorization 方法会调用asp.net的授权验证机制!
//base.OnAuthorization(filterContext);
}
}
NET MVC过滤器

2、在控制器FilterTest中的Index上添加TestAuthorize标记

       [MyCustormFilter]
[TestAuthorize]
public ActionResult Index()
{
return View();
}

运行看下结果:

NET MVC过滤器

Exception

1、新建TestHandleError.cs

NET MVC过滤器
    /// <summary>
/// 异常处理 过滤器
/// </summary>
public class TestHandleError : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
//1.获取异常对象
Exception ex = filterContext.Exception;
//2.记录异常日志
//3.重定向友好页面
filterContext.Result = new RedirectResult("~/error.html");
//4.标记异常已经处理完毕
filterContext.ExceptionHandled = true; base.OnException(filterContext);
}
}
NET MVC过滤器

2、在Action上面加TestHandleError

NET MVC过滤器
  [TestHandleError]
public ActionResult GetErr()
{
int a = 0;
int b = 1 / a;
return View();
}
NET MVC过滤器

注意:通常这样的异常处理我们是放在全局过滤器上面的。

NET MVC过滤器
   public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
//添加全局过滤器
filters.Add(new TestHandleError());
}
}
NET MVC过滤器

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

  1. mvc过滤器学习&lpar;1&rpar;

    mvc 过滤器结构图 AuthorizeAttribute AuthorizeAttribute是IAuthorizationFilter的默认实现,添加了Authorize特性的Action将对用户 ...

  2. ASP&period;NET MVC 过滤器&lpar;一&rpar;

    ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...

  3. ASP&period;NET MVC 过滤器&lpar;三&rpar;

    ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...

  4. ASP&period;NET MVC 过滤器&lpar;四&rpar;

    ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP ...

  5. ASP&period;NET MVC 过滤器&lpar;五&rpar;

    ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...

  6. asp&period;net MVC 过滤器使用案例:统一处理异常顺道精简代码

    重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...

  7. MVC过滤器详解

    MVC过滤器详解   APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...

  8. MVC过滤器使用案例:统一处理异常顺道精简代码

    重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...

  9. ASP&period;NET MVC 过滤器详解

    http://www.fwqtg.net/asp-net-mvc-%E8%BF%87%E6%BB%A4%E5%99%A8%E8%AF%A6%E8%A7%A3.html 我经历了过滤器的苦难,我想到了还 ...

  10. ASP&period;NET MVC过滤器(一)

    MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等 ...

随机推荐

  1. 20145212 《Java程序设计》第9周学习总结

    20145212 <Java程序设计>第9周学习总结 教材学习内容总结 一.JDBC架构 1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插 ...

  2. SQLServer 维护脚本分享(07)IO

    sp_helpfile --当前数据库文件分配情况 sp_spaceused --当前db空间大小(有时不准) sp_spaceused 'dbo.user' --指定表的空间大小(有时不准) sp_ ...

  3. C&plus;&plus;学习基础六——复制构造函数和赋值操作符

    1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...

  4. Hibernte继承映射

    继承映射分为三种: 继承结构共用一张表结构 每个类一张表结构 每个具体类一张表结构 下面使用Animal.Dog.Fish举例 Animal类如下: package com.hml.domain.a; ...

  5. 菜鸟学习Struts——bean标签库

    一.Struts标签库. Struts实际上包含了4个标签库:bean,logic,html,tiles bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息 logic:替代JSTL ...

  6. java学习之多生产者和多消费者

    在上一节当中我们说道了,java多线程当中单个消费者对应单个生产者的关系.这个时候有几个点需要注意一下,第一个就是把if判断flag的语句改成while这样能够避免,比如如果我们这个时候用if的话判断 ...

  7. UESTC&lowbar;男神的约会 2015 UESTC Training for Dynamic Programming&lt&semi;Problem J&gt&semi;

    J - 男神的约会 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  8. DataTable转换实体类

    using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data. ...

  9. Common lisp菜鸟指南&lpar;译&rpar;

    Common lisp菜鸟指南(译) Common lisp菜鸟指南(译)

  10. MongoDB 搭建可复制群集

    一.概述 MongoDB复制群集支持节点故障自动切换,最小配置应包含3个节点,正常情况下应该至少包含两个数据节点,第三个节点可以是数据节点也可以是仲裁节点.仲裁节点的作用是当出现偶数节点导致无法仲裁的 ...