8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

时间:2022-05-14 14:35:02

ASP.NET Filers用来在MVC框架的不同请求处理阶段,注入额外的逻辑。过滤器为横切关注点提供了一种方法(日志记录,授权,缓存)。

在这篇文章中,我将会向你介绍MVC框架支持的各种不同种类过滤器,怎样控制过滤器的执行,怎样创建和使用过滤器。我们可以创建自定义的过滤器。在每一个请求中,控制器中的方法会检查,是否用户是正确授权的,如果是正确授权的用户,就会允许用户执行相应的方法,显示相应的视图给用户。

ASP.NET支持四种类型的过滤器。Authentication过滤器是在ASP.NET MVC 5中介绍的。每种过滤器都允许你在请求的不同阶段,注入相应逻辑处理。

Filters Type【过滤器类型】 Interface【接口】  
Authentication【验证过滤器】 IAuthenticationFilter 在所有其他的过滤器或者Action方法之前执行
Authorization【授权过滤器】 IAuthorizationFilter 在允许其他过滤器或者Action方法之前,执行
Action【Action过滤器】 IActionFilter 在Action方法之前或者之后执行
Result【结果过滤器】 IResultFilter 在Action方法的执行结果之前或者之后执行
Exception【异常过滤器】 IExceptionFilter 只有在其他过滤器,Action方法,或者Action的执行结果执行的时候出现异常,才会执行异常过滤器

ASP.NET 中的过滤器类型以及它们的执行顺序

1.Authentication Filters【验证过滤器】

Authentication 过滤器在任何其他过滤器或者Action方法之前执行。Authentication 过滤器确保你是合法还是非法用户。它实现了IAuthenticationFilter接口。

2.Authorization Filters【授权过滤器】

AuthorizeAttribute和RequireHttpsAttribute都是Authorizatio过滤器的例子。授权过滤器用来检查用户是否有访问权限。授权过滤器实现了IAuthorizationFilter接口。

3.Action Filters【Action过滤器】

Action过滤器是一个特性,你可以应用到控制器的方法上,也可以应用到整个控制器上。这个过滤器将会在Action方法开始执行之前或者开始执行之后执行,以及Action执行之后开始调用。

Action过滤器实现了IActionFilter接口,有两个方法OnActionExecuting和OnActionExecuted。OnActionExecuting在Action方法之前执行,并给了一个机会来取消执行Action方法。这些过滤器包含了一些逻辑,在Action方法执行之前或者执行之后调用,你可以使用Action过滤器,来修改控制器中的Action方法返回的视图数据。

4.Result Filters【结果过滤器】

OutputCacheAttribute类就是结果过滤器的一个例子。结果过滤器实现了IResultFilter接口。和IActionFilter类似,也有OnResultExecuting和OnResultExecuted两个方法。这些过滤器包含一些逻辑,在ViewResult开始执行之前或者之后调用。你可以使用结果过滤器,来修改视图的结果,在视图呈现到浏览器之前。

5.Exception Filters【异常过滤器】

HandleErrorAttribute类是ExceptionFilters的一个例子。异常过滤器实现了IExceptionFilter接口,异常过滤器在程序运行的过程中如果发生了未处理的异常就会执行。这些过滤器可以用做异常过滤器,用来处理控制器中的Action方法的错误,或者Action方法返回结果的错误。你可根据需要以重写这些方法。

好了,上面的理论知识介绍的差不多,我们来创建一个项目,练练手,实际操作一下:

1.在ASP.NET MVC 5中创建一个自定义的Authentication过滤器

创建一个MV项目:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

在项目中,创建一个文件夹AuthData,添加我们自定义的类AuthAttribute;

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

IAuthenticationFilter接口定义了两个方法:OnAuthentication和OnAuthenticationChallenge。OnAuthentication先执行,用来处理需要的验证逻辑。OnAuthenticationChallenge用来根据用户验证的结果,进一步做限制处理。在OnAuthentication方法中,我写了一些代码用来对用户作验证,OnAuthenticationChallenge中,我写了一些代码,用来执行其他任务。

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

现在,让我们来测试一下,我们写的自定义验证过滤器;

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

运行项目,然后注册:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

你还可以管理你的账户信息:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

 2.现在看看 Authorization Filter:

Authorization确保只有经过允许的用户才能访问。这些过滤器在Action方法执行之前调用,实现了IAuthorizationFilter接口。包含了一个方法OnAuthorization。

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

为了验证Authorization,我们对刚才的AuthAttribute类作个修改。我们重写了AuthorizeAttribute类中的AuthorizeCore(HttpContextBase httpContext)方法。

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

现在打开Home控制器,修改代码:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

运行项目:输入刚才注册的账号和密码:可以看到授权通过,登录成功了。

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

还可以这样:在About方法上标识特性,然后允许项目,点击关于按钮,就会弹出来登录页面,让登录:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

还可以限制,只让某个用户看到About页面,可以这样做:这里,我只让649713412@qq.com这个用户访问About页面。

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

现在我们运行项目,重新注册一个账号123456@qq.com.

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

可以看到,123456@qq.com这个账号访问不了About页面。又弹出来了登录页面。

 3.再来看看Action Filter,又下面的几个Action Filters:

  1. Output Cache:缓存控制器的Action
  2. Handle Error:当控制器的方法报错的时候,处理错误
  3. Authorize :允许你限制有相应权限的才能访问

Output Cache

下面的例子,指定返回值将会被缓存5秒

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

再看看Handle Error例子:

为了实现Handle例子,我们改装一下AuthAttribute类:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

注意我们需要创建一个静态的错误页面:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

然后运行项目,在地址栏输入:8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

然后就看到了:错误页面》》

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

输入大于100的试试:

8. Filters in  ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

好了 ,以上就是Filters的全部内容,有不明白的,欢迎留言。目前这个0基础系列,暂时先告一段落,我打算写一些高级的内容,后续如果有基础的知识需要讲,就接着这个系列写。谢谢大家支持。

8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】的更多相关文章

  1. 从 MVC 到使用 ASP.NET Core 6.0 的最小 API

    从 MVC 到使用 ASP.NET Core 6.0 的最小 API https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/ 2007 年,随着 ...

  2. Announcing the Release of ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 for VS2012

    The NuGet packages for ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 are now live o ...

  3. Spring.Net2.0+NHibernate4.0 +Asp.Net Mvc4 二

    6.SN.Controllers 文件夹Config(Controllers.xml) 文件夹Controllers(TestController.cs) Controllers.xml <?x ...

  4. ABP&lpar;现代ASP&period;NET样板开发框架&rpar;系列之13、ABP领域层——数据过滤器(Data filters)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之13.ABP领域层——数据过滤器(Data filters) ABP是“ASP.NET Boilerplate P ...

  5. Asp&period;Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. ASP&period;NET MVC 5 01 - ASP&period;NET概述

    本篇目录: ASP.NET 概述 .NET Framework 与 ASP.NET ASP.NET MVC简介 ASP.NET的特色和优势 典型案例 ▁▃▅ ASP.NET概述 ▅▃▁ 目前开发B/S ...

  7. ASP&period;NET MVC 5 02 - ASP&period;NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

  8. &period;NET跨平台之旅:将示例站点从 ASP&period;NET 5 RC1 升级至 ASP&period;NET Core 1&period;0

    终于将“.NET跨平台之旅”的示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 ,经历了不少周折,在这篇博文中记录一下. 从 AS ...

  9. &lbrack;&period;net 面向对象程序设计深入&rsqb;(4)MVC 6 —— 谈谈MVC的版本变迁及新版本6&period;0发展方向

    [.net 面向对象程序设计深入](4)MVC 6 ——谈谈MVC的版本变迁及新版本6.0发展方向 1.关于MVC 在本篇中不再详细介绍MVC的基础概念,这些东西百度要比我写的全面多了,MVC从1.0 ...

随机推荐

  1. 昨天晚上画了个带apple的图:ide插件与php和xdebug通信原理图,周末写1个调试器。

    昨天晚上画了个带apple的图:ide插件与php和xdebug通信原理图,周末写1个调试器.

  2. JAVA生成图片缩略图、JAVA截取图片局部内容

    package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; ...

  3. java判断数据类型两种方式

    instanceof        String s = ""; System.out.println(s instanceof String); // true     simp ...

  4. Java的static详解

    static ['stætɪk] n. 静电:静电干扰 adj. 静态的:静电的:静力的 在计算机上我们译为:静态的.在Java种根据它修饰对象不同,我们可以划分为 1. static对象 2. st ...

  5. 结构的具体说明sublime text 2&sol;3的Golang开发环境

    1.下载并安装sublime text 2/3 官网下载:http://www.sublimetext.com/ 2.安装成功sublime text后.启动sublime text.选择菜单栏&qu ...

  6. Self referencing loop detected with type

    json.net namespace EFDAL{    using System;    using System.Collections.Generic;    using Newtonsoft. ...

  7. Transport &lpar;VMDB&rpar; error -44&colon; Message

     关于点击电源按钮的时候出现了这情况Transport (VMDB) error -44: Message.   虚拟机有个服务没开.开始菜单--运行--services.msc 回车   找到VMw ...

  8. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

  9. 使用php生成数字、字母组合验证码

    项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略.实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在 ...

  10. &lpar;线段树 区间查询&rpar;The Water Problem -- hdu -- 5443 (2015 ACM&sol;ICPC Asia Regional Changchun Online)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 The Water Problem Time Limit: 1500/1000 MS (Java/ ...