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="我是全局"});
        }
    }
}

全局过滤器被调用的时间:

看下图, 可以启动下调试, 看看全局过滤器被调用的时间:

时间: 2024-10-29 10:46:17

013. MVC5过滤器的相关文章

一张图看懂ASP.NET MVC5认证和授权过滤器的执行顺序

IAuthenticationFilter是MVC5中的新特性,它有2个关键方法: OnAuthentication OnAuthenticationChallenge 当IAuthenticationFilter和IAuthorizationFilter结合使用时,流程看似比较复杂: 根据路由选择Controller和Action 如果设置了IAuthenticationFilter,则会调用OnAuthentication方法 在OnAuthentication中如果设置了context的R

ASP.NET MVC5(一):ASP.NET MVC概览

ASP.NET MVC概览 ASP.NET MVC是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. ASP.NET MVC模式简介 MVC将Web应用程序划分为三个主要的部分,以下是MSDN给出的定义: 模型(Model):模型对象是实现应用程序数据域逻辑的应用程序部件. 通常,模型对象会检索模型状态并将其存储在数据库中. 例如,Product 对象可能会从数据库中检索信息,操作该信息,然后将更新的信息写回到 SQL S

MVC5的AuthorizeAttribute详解

现今大多数的网站尤其是购物网站都要求你登录后才能继续操作,当你匿名的将商品放入购物车后,不可能匿名购买这时可以转到登录界面让用户进行登录验证. 适用系统自带的过滤器 MVC5只要将属性[Authorize]置于相关的action之前就行,那么在调用Buy action之前,就会运用Authorize过滤器. 1 [Authorize] 2 public ActionResult Buy(int id) 3 { 4 //其它购买逻辑代码放在这里 5 6 } 2. 也可以将属性[Authorize]

Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim

Identity学习笔记 Asp.Net Identity学习笔记+MVC5默认项目解析_基础用法 Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim Identity学习笔记授权以角色授权IdentityRoleRoleManager基于声明的(Claims)IPrincipalIIdentityCalimsIdentityClaim用户登入用户授权其他细节Claim Type命名空间 授权 最常用的授权就是给Controller或Action打上[Authori

vue2购物车ch3-(过滤器使用 单件商品金额计算 全选全不选 总金额计算 删除商品功能)

1 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- Always force latest IE rendering engine or request Chrome Frame --> <meta content="IE=edge,chrome=1" http-equiv

构建ASP.NET MVC5+EF6+EasyUI 1.5+Unity4.x注入的后台管理系统(1)-前言与目录(持续更新中...)

前言: 起初写这个框架的时候,可以说在当时来说并不是很流行的设计模式,那是在2012年,面向对象的编程大家都很熟悉, 但是“注入.控制反转(DI,IOC,依赖注入).AOP切面编程”新兴名词 很多人并不知道特别是从事.NET开发的人,至少在当时 是这么样的,但是在今天它们却是非常流行的技术指标,很多大牛也承认,这是主流的开发模式,你们可以从招聘网的技术岗位看出. 我从事过MVC2.0到5.0的相关开发工作,见证了MVC的成熟演变过程,就像本框架一样,设计模式未曾改变,但是代码一直在重 构.我也坚

【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

[第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策略(MVC5+EF6) [第四篇]ASP.NET MVC快速入门之完整示例(MVC5+EF6) [番外篇]ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6) 请关注三石的博客:http://cnblogs.com/sanshi 表单身份验证(Forms Authentication

MVC5应用程序目录

之前一直用有道云来作学习笔记,这回就慢慢试着用博客园来记笔记吧,用MVC5开发完一个项目了,最近忽然对MVC5框架特别迷惑.重新复习一下吧 第一篇  MVC 5应用程序的项目结构,接下来我们来依次解释下他们各自的应用.(摘自:http://www.jb51.net/article/50839.htm) App_Data: 该文件夹主要是包含应用程序的本地存储, 它通常以文件形式(如Microsoft SQL Server数据库文件, XML文件等)包含数据存储. App_Start: 该文件夹包

ASP.NET MVC 03 - 安装MVC5并创建第一个应用程序

不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小玩笑.哈哈.) 参考书籍:<ASP.NET MVC 4 Web编程>.<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业及应用>.度娘谷歌等. -= 安