ASP.NET MVC过滤器(一)

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

  APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理。这时候就用到了过滤器。

一、MVC支持的过滤器类型有四种:

  Authorization(授权)

  Action(行为)

  Result(结果)

  Exception(异常)


滤器类型


接口


描述


Authorization


IAuthorizationFilter


此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法


Exception


IExceptionFilter


用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常


Action


IActionFilter


用于进入行为之前或之后的处理


Result


IResultFilter


用于返回结果的之前或之后的处理

  但是默认实现它们的过滤器只有三种,分别是Authorize(授权),ActionFilter,HandleError(错误处理);各种信息如下表所示

二、使用Filter的方式

  1、通过特性的方式使用Filter

  2、通过重写Controller方法来使用Filter

三、Authorize过滤器

方法一:使用特性的方式

  定义一个类,继承与AuthorizeAttribute,并重写OnAuthorization方法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6
 7 namespace MvcApplication2.Filters
 8 {
 9     public class LoginAttribute:AuthorizeAttribute
10     {
11         public override void OnAuthorization(AuthorizationContext filterContext)
12         {
13             //如果Session中不存在该值,那么表示没有登录
14             if (filterContext.HttpContext.Session["User"] == null)
15             {
16                 filterContext.Result = new RedirectResult("/Account/Login");
17             }
18         }
19     }
20 }

  这里判断如果,用户没有登录,那么需要返回到登录界面。

  虽然定义了一个过滤器,但是还需使用过滤器

使用过滤器的方式也有几种方式:

1、在方法前加上授权特性

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using MvcApplication2.Filters;
 7
 8 namespace MvcApplication2.Controllers
 9 {
10     public class HomeController : Controller
11     {
12         //在方法上加入授权特性
13         [Login]
14         public ActionResult Index()
15         {
16             ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
17
18             return View();
19         }
20
21         public ActionResult About()
22         {
23             ViewBag.Message = "Your app description page.";
24
25             return View();
26         }
27
28         public ActionResult Contact()
29         {
30             ViewBag.Message = "Your contact page.";
31
32             return View();
33         }
34     }
35 }

  这种方式,只能对有加上该授权特性的方法进行登录检查,其它没有加的方法无法进行过滤。在上面代码中,只能对该controller中index的action进行过滤,另外的About和Contact无法过滤。

2、在类上加特性,那么表示对该类下所有方法加上该特性

 1 using System.Web;
 2 using System.Web.Mvc;
 3 using MvcApplication2.Filters;
 4
 5 namespace MvcApplication2.Controllers
 6 {
 7     [Login]
 8     public class HomeController : Controller
 9     {
10         public ActionResult Index()
11         {
12             ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
13
14             return View();
15         }
16
17         public ActionResult About()
18         {
19             ViewBag.Message = "Your app description page.";
20
21             return View();
22         }
23
24         public ActionResult Contact()
25         {
26             ViewBag.Message = "Your contact page.";
27
28             return View();
29         }
30     }
31 }

  这种方式虽然不用对每个方法都添加特性,但是也只是对在类上加上了该特性的Controller有作用,其它没有加的会无效

3、注册全局过滤器

  在实际项目中,一个项目往往会有很多的Controller和Action那么,如果向上面的两种方式来出来都不够理性,通常我们使用全局过滤器。使用方式

 1 using System.Web;
 2 using System.Web.Mvc;
 3
 4 namespace MvcApplication2
 5 {
 6     public class FilterConfig
 7     {
 8         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 9         {
10             //在此处添加需要注册的全局过滤器
11             filters.Add(new MvcApplication2.Filters.LoginAttribute());
12         }
13     }
14 }

  这样就不用再每个类上添加Login过滤器了,默认对每个Controller的每个Action都使用该特性。

时间: 2024-10-19 17:28:05

ASP.NET MVC过滤器(一)的相关文章

ASP.NET MVC 过滤器说明

ASP.NET MVC 过滤器分别如下: 过滤器执行顺序:  

ASP.NET MVC 过滤器(三)

ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中,这种编程模式就是横向的插入点),言归正传,我们还是以学习过滤器为主.对于IAuthorizationFilter授权认证过滤器的使用篇幅,我知道怎么用但是写不出来,里面包含知识点很多,功底尚浅写了一半又给删掉了,宁愿不发也不能坑人,在后面的学习中假使我可以掌握了,一定会及时的写出来跟大家分享.这个目

ASP.NET MVC 过滤器(一)

ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢,在MVC框架中提供了一种机制在控制器方法执行之前我们还可以通过这种机制来做一些横向切面的操作,这种机制的实现就是过滤器了,在本篇和后续的篇幅中将会对几种过滤器做一番讲解,并且会对过滤器在框架中的一个执行过程进行粗略的讲解. ASP.NET MVC过滤器 过滤器在系统框架中的整体对象模型 IAuth

ASP.NET MVC 过滤器(四)

ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP.NET MVC过滤器 过滤器在系统框架中的整体对象模型 IAuthorizationFilter授权认证过滤器的执行过程 使用IAuthorizationFilter过滤器 IActionFilter行为过滤器的执行过程 自定义实现IActionFilter行为过滤器 异常过滤器的使用 自定义实现

ASP.NET MVC 过滤器开发与使用

文章来源:http://www.cnblogs.com/JinvidLiang/p/4660200.html(感谢) ASP.NET MVC 过滤器开发与使用 ASP.NET MVC 中给我们提供了内置的过滤器,通过过滤器,我们可以在控制器内的方法前后,添加必须的业务逻辑,如权限验证,身份验证,错误处理等. 今天,我们主要介绍3个过滤器:OutputCacheAttribute,AuthorizeAttribute,HandleErrorAttribute. 我们会根据这三个内置过滤器,分别举不

ASP.NET MVC 过滤器(五)

ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大概的讲解. ASP.NET MVC过滤器 过滤器在系统框架中的整体对象模型 IAuthorizationFilter授权认证过滤器的执行过程 使用IAuthorizationFilter过滤器 IActionFilter行为过滤器的执行过程 自定义实现IActionFilter行为过滤器 异常过滤器

[转]ASP.NET MVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only)

用途:防止CSRF(跨网站请求伪造). 用法:在View->Form表单中:<%:Html.AntiForgeryToken()%> 在Controller->Action动作上:[ValidateAntiForgeryToken] 原理: 1.<%:Html.AntiForgeryToken()%>这个方法会生成一个隐藏域:<inputname="__RequestVerificationToken" type="hidden&qu

Asp.Net MVC过滤器

在MVC中有如下过滤器 1.AuthorizeAttribute 2.ActionFilterAttribute 3.HandleErrorAttribute 一.首先介绍AuthorizeAttribute,这个就是授权过滤器 1.创建一个类,继承AuthorizeAttribute 2.重写OnAuthorization方法,在方法里面可以验证权限,如Session和Cookie 3.添加标记到方法或类上,如果在方法上添加特性,那么会在添加特性的方法执行前调用OnAuthorization方

ASP.NET MVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only)

用途:防止CSRF(跨网站请求伪造). 用法:在View->Form表单中:<%:Html.AntiForgeryToken()%> 在Controller->Action动作上:[ValidateAntiForgeryToken] 原理: 1.<%:Html.AntiForgeryToken()%>这个方法会生成一个隐藏域:<inputname="__RequestVerificationToken" type="hidden&qu