ASP.NET MVC 重点教程一周年版 第六回 过滤器Filter

简介: 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地化与国际化设置  实现动态Action Filter是一种声明式编程方式,在Asp.net MVC中它只能限制于Action(或它的Controller)。

在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能

  1. 判断登录与否或用户权限
  2. 决策输出缓存
  3. 防盗链
  4. 防蜘蛛
  5. 本地化与国际化设置 
  6. 实现动态Action

Filter是一种声明式编程方式,在Asp.net MVC中它只能限制于Action(或它的Controller)。
Filter要继承于ActionFilterAttribute抽象类,并可以覆写void OnActionExecuting(ActionExecutingContext)和
void OnActionExecuted(ActionExecutedContext)

以及void OnResultExecuting(ResultExecutingContext)和
void OnResultExecuted(ResultExecutedContext)

OnActionExecuting是Action执行前的操作,OnActionExecuted则是Action执行后的操作

而OnResultExecuting是解析ActionResult前执行,OnResultExecuted是解析ActionResult后执行。

一、应用于Action的Filter


下面我给大家一个示例,来看看它的的执行顺序
首先我们先建立 一个Filter,名字叫做TestFilter

  public class TestFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuting<br/>";
}

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuted<br/>";
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuting<br/>";
}

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuted<br/>";
}
}

然后建立一个Action:

        [TestFilter]//将此Filter应用于Action
public ActionResult filteraction()
{
return View();
}

 

在它的View中写入:

<%Session["temp"] += "View Execute<br/>"; %>

 

最后在其它页面得到Session["temp"]的输出结果:

TestFilter OnActionExecuting
TestFilter OnActionExecuted
TestFilter OnResultExecuting
View Execute
TestFilter OnResultExecuted

由此可得到它们的执行顺序也是如上

 

二、Controller的Filter

将Filter应用在Controller上有2种方式

1.直接将Filter应用在Controller上,如:

    [TestFilter]
public class EiceController : Controller
{
}

 

2.重写Controller内的
OnActionExecuting/OnActionExecuted/OnResultExecuting/OnResultExecuted的四个方法。

下面我们说几个系统的Filter

三、AcceptVerbs

规定页面的访问形式,如

        [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Example(){
return View();
}


页面只能以Post形式访问,即表单提交。

四、ActionName

规定Action的名称。

应用场景:如果不想用方法名做为Action名,或Action名为关键字的话,如

       [ActionName("class")]
public ActionResult Example(){
return View();
}

 

五、NonAction

当前方法仅是普通方法不解析为Action

六、OutputCache

为Action添加缓存

        [OutputCache(Duration = 60, VaryByParam = "*")]
public ActionResult Example()
{
return View();
}

 

七、ValidateInput

该Action可以接受Html等危险代码(ASP.NET MVC在aspx中设置<%@ Page 的属性无法完成等同任务。)

        [ValidateInput(false)]
public ActionResult Example()
{
return View();
}

 

八、ValidateAntiForgeryTokenAttribute

用于验证服务器篡改。

        [ValidateAntiForgeryToken]
public ActionResult Example()
{
return View();
}
目录
相关文章
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
765 18
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
910 12
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
1105 5
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
447 1
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
622 7
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
562 2
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
944 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
469 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
520 0