013. MVC5过滤器
微软提供了4中过滤器:
1.Action过滤器: 在Action方法执行之前和Action方法执行之后, 会执行此过滤器中的代码. 比如在执行public ActionResult Index()方法之前或之后; 也可以说是在方法执行前或执行后;
接口: IactionFilter 抽象类名: ActionFilterAttribute 添加一个实现类 MyActionFilterAttribute.cs , 这里这个Attribute后缀必须添加
2. View视图结果渲染过滤器:在视图渲染之前或之后做一点处理;
接口: IresultFilter
3. 全局错误异常过滤器: 当整个网站出现异常, 就来执行此过滤器中代码
接口:
4. 校验过滤器(身份验证过滤器):不常用
使用Action过滤器:
添加一个MyActionFilterAttribute类, 继承ActionFilterAttribute , 一般不去实现接口, 而是去继承这个抽象类, 而这个继承类应该以Attribute作为后缀, 右键Models目录→添加一个MyActionFilterAttribute类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MasterDemo.Models
{
//如果想要全局的标签都要起到作用, 则需要再在这个类上也打上一个标签, 只要把 AllowMultiple = false, 改成true, 就能使该过滤器全局起到作用, 下面这个仅仅是他的默认特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MyActionFilterAttribute: System.Web.Mvc.ActionFilterAttribute
{
public string Name
{
get; set;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
filterContext.HttpContext.Response.Write("我是执行前打出来的" + Name);
} public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
filterContext.HttpContext.Response.Write("我是执行后打出来的" + Name);
} public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
filterContext.HttpContext.Response.Write("我是在结果执行前打出来的" + Name);
} public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
filterContext.HttpContext.Response.Write("我是结果执行后打出来的" + Name);
}
}
}
控制器的引用:

运行结果:
Index.cshtml内容:
@{
ViewBag.Title = "Home Page";
}
<div>
<h1>ASP.NET</h1>
</div>
<div>
<h2>Getting started</h2>
</div>
运行结果:

打到类上, 此时访问Index页面还是上面的运行结果, 如果访问About页面, 结果则是 我是执行前打出来的Home/我是打在类上的特性; 类上的特性适用于整个类内的所有方法, 但是如果该方法上有了特性, 则以该方法上的特性为主

全局过滤器:
可以用来实现判断用户是否登录, 验证用户身份
截图:

代码:
using System.Web;
using System.Web.Mvc; namespace MasterDemo
{
public class FilterConfig
{
//要使用全局过滤器, 则必须在此文件中配置全局过滤器, 全局过滤器, 对每一个类都生效, 当然需要将全局过滤器的类打上前面提到的特性, 比如这里要引用/Models/MyActionFilterAttribute的过滤器, 则需要在此添加, 并且/Models/MyActionFilterAttribute类的前面也要添加新的特性, 这个特性在抽象类上其实也是有的
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//添加全局过滤器, 此时访问此程序内所有的页面都将先加载此过滤器, 那么这个过滤器可以用来实现判断用户是否登录
filters.Add(new Models.MyActionFilterAttribute() { Name="我是全局"});
}
}
}
全局过滤器被调用的时间:
看下图, 可以启动下调试, 看看全局过滤器被调用的时间:

013. MVC5过滤器的更多相关文章
- ASP.NET MVC5 学习笔记-1 控制器、路由、返回类型、选择器、过滤器
[TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序,选择MVC,选择添加测试. 在解决方案上右键,选择"管理NuGet程序包& ...
- MVC5控制器、路由、返回类型、选择器、过滤器
ASP.NET MVC5 学习笔记-1 控制器.路由.返回类型.选择器.过滤器 [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序, ...
- asp.net mvc5中的过滤器重写
asp.net mvc5中增加了一种过滤器类型叫过滤器重写,这种过滤器类型可以在操作或者控制器上忽略更高层次上设置的过滤器类型,它可以重写五种基本的过滤器接口类型:IAuthenticationFil ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】
系列目录 上次的探讨没有任何结果,我浏览了大量的文章和个别系统的参考!决定用Cache来做,这可能有点难以接受但是配合mvc过滤器来做效果非常好! 由于之前的过滤器我们用过了OnActionExecu ...
- 提高生产性工具(五) - 数据的过滤器和图形化(适用于 MVC5 + MongoDB)
在下面流水账似的文章之前,先将一些感悟说一下. 1.如果一个系统对于某个功能在至少三个地方使用的话,必须将其抽象提炼出来,而且时间点最好是大规模测试之前. 2.提炼出来的功能,如果品质做得好,整个系统 ...
- 一张图看懂ASP.NET MVC5认证和授权过滤器的执行顺序
IAuthenticationFilter是MVC5中的新特性,它有2个关键方法: OnAuthentication OnAuthenticationChallenge 当IAuthenticatio ...
- ASP.NET MVC5基础-过滤器(Filters)详解
什么是过滤器? 过滤器的类型与作用 定义过滤器 授权过滤器 动作过滤器 结果过滤器 异常处理过滤器 过滤器的使用方法 总结 什么是过滤器? 通过上一篇关于Controller控制器的文章我们知道,MV ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 任务调度系统界面 http: ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- python学习笔记(控制语句)
博主平时学python的时候.大多是复制网上别人现成的进行改动实现自己的测试的要求 所有python基础语法其实掌握的很差 本来想优化下接口脚本实现.发现基础的循环控制语句都不知道怎么写 所以准备整理 ...
- python线程、进程和协程
链接:http://www.jb51.net/article/88825.htm 引言 解释器环境:python3.5.1 我们都知道python网络编程的两大必学模块socket和socketser ...
- Android DDMS ADB启动失败错误解决!
ADB server didn't ACK && make sure the plugin is properly configured! adb启动失败一般是端口被占用! 解决方法和 ...
- 51nod 1406 位运算/dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1406 1406 与查询 题目来源: CodeForces 基准时间限制: ...
- QT延时方法
(转自:http://blog.sina.com.cn/s/blog_613cfe940100kacm.html) 1. void sleep(unsigned int msec){ QTime ...
- JavaScript中url 传递参数(特殊字符)解决方法及转码解码的介绍
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.下表中列出了一些URL特殊符号及编码 十六进制值 1. + URL 中+号表示空格 %2B 2. 空 ...
- New Concept English three (42)
21 33 Cave exploration, or pot-holing, as it has come to be known, is a relatively new sport. Perhap ...
- AlexNet神经网络结构
Alexnet是2014年Imagenet竞赛的冠军模型,准确率达到了57.1%, top-5识别率达到80.2%. AlexNet包含5个卷积层和3个全连接层,模型示意图: 精简版结构: conv1 ...
- Oracle:Create, alter, drop and add!
Oacle 下对标下元素约束条件的添加与删除 插入元素 alter table table_name add add_name data_type; 添加约束条件 NOT NULL alter tab ...
- NGINX 配置文件配置url重写
1.项目在根目录: location / { index index.html index.htm index.php l.php; autoindex ...