ASP.NET MVC 过滤器开发与使用
ASP.NET MVC 中给我们提供了内置的过滤器,通过过滤器,我们可以在控制器内的方法前后,添加必须的业务逻辑,如权限验证,身份验证,错误处理等。
今天,我们主要介绍3个过滤器:OutputCacheAttribute,AuthorizeAttribute,HandleErrorAttribute。
我们会根据这三个内置过滤器,分别举不同的例子进行解释说明。
1. OutputCacheAttribute
我们先看看源码:

可以看出OutputCacheAttribute继承了ActionFilterAttribute,所以可以重写ActionFilterAttribute的方法OnActionExecuting等,
类中有CacheProfile,Duration,VaryByParam几个属性,下面我们看一下用法。添加如下代码:
[OutputCache(Duration=)]
public ActionResult OutputCache()
{
ViewData["TimeCache"] = "当前时间是:" + DateTime.Now.ToLongTimeString();
return View();
}
打开浏览器,可以看到,不断刷新,每10秒就会更新一次:

当然,也可以写在页面上,在页面添加代码:
<%@ OutputCache Duration="10" VaryByParam="None" %>
如下面代码:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<%@ OutputCache Duration="" VaryByParam="None" %>
<!DOCTYPE html> <html>
<head runat="server">
<meta name="viewport" content="width=device-width" />
<title>OutputCache</title>
</head>
<body>
<div>
<%=ViewData["TimeCache"] %>
</div>
</body>
</html>
或者使用CacheProfile,代码如下:
[OutputCache(CacheProfile = "testProfile")]
public ActionResult OutputCache()
{
ViewData["TimeCache"] = "当前时间是:" + DateTime.Now.ToLongTimeString();
return View();
}
在web.config添加如下配置:
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="testProfile" duration="" varyByParam="*" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
2. AuthorizeAttribute
AuthorizeAttribute类的作用,主要是为页面指定操作用户和角色。
我们假设以Session作为页面管理权限,新建一个CustomAuthorize类,添加如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MvcMobileDMS.App_Start
{
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
//假设以Session作为判断页面权限
if (filterContext.HttpContext.Session["temp"] == null)
{
filterContext.HttpContext.Response.Redirect("~/dms/logon");
}
base.OnAuthorization(filterContext); }
}
}
再在控制器中的方法添加如下代码:
[MvcMobileDMS.App_Start.CustomAuthorize]
public ActionResult Authorize()
{ return View();
}
即可进行权限检查。
3. HandleErrorAttribute
HandleErrorAttribute特性主要用于处理由操作引发的错误。在实际操作中我们可以继承HandleErrorAttribute类,并重写OnException方法来进行错误记录。
首先,我们新建一个错误页:
public ActionResult error()
{
return View();
}
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html> <html>
<head runat="server">
<meta name="viewport" content="width=device-width" />
<title>error</title>
</head>
<body>
<div>
Sorry.an error occoured.
</div>
</body>
</html>
并添加错误处理类ErrorHandle继承自HandleErrorAttribute,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MvcMobileDMS.App_Start
{
public class ErrorHandle : HandleErrorAttribute
{
public override void OnException(ExceptionContext Context)
{
HttpContext.Current.Response.Redirect("~/dms/error");
base.OnException(Context);
}
}
}
在DMS控制器新增一个方法EceptionThrow,并加上过滤器ErrorHandle,代码如下:
[MvcMobileDMS.App_Start.ErrorHandle]
public ActionResult EceptionThrow()
{
throw new ArgumentNullException("filterContext");
}
下面,我们打开浏览器,输入地址:http://localhost:7449/dms/EceptionThrow,显示如下:

当EceptionThrow()方法抛出错误时,ErrorHandle过滤器触发OnException方法,跳转到error页面。
由此可见,我们可以通过HandleErrorAttribute过滤器,处理各种Exception,并使用自定义方法进行处理。
以上,希望能对您有所帮助O(∩_∩)O哈哈~
ASP.NET MVC 过滤器开发与使用的更多相关文章
- Asp.net Mvc模块化开发之分区扩展框架
对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...
- Asp.net Mvc模块化开发系列(目录)
模块化开发是非常重要的,模块化开发是个系统性问题,为此我觉得有必须要写一个系列的文章才能基本说的清楚 那又为什么要写一个目录呢? 其一.是对我昨天承诺写一个系列新的文章的回应 其二.是先写出一个大纲, ...
- ASP.NET MVC 过滤器(一)
ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...
- ASP.NET MVC 过滤器(三)
ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...
- ASP.NET MVC 过滤器(四)
ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP ...
- ASP.NET MVC 过滤器(五)
ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...
- ASP.NET MVC 网站开发总结(三) ——图片截图上传
本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> < ...
- ASP.NET MVC框架开发系列课程 (webcast视频下载)
课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...
- 像asp.net Mvc一样开发nodejs+express Mvc站点
像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...
随机推荐
- IIS功能查看、配置
#获取所有IIS功能列表: get-webconfiguration -filter /system.webserver #查看目录浏览功能的配置信息:Get-WebConfiguration -fi ...
- hdu 5565 Clarke and baton 二分
Clarke and baton Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- C++ Brush
关键点 实现过程 void CCreateBrushView::OnDraw(CDC* pDC) { CCreateBrushDoc* pDoc = GetDocument(); AS ...
- JAVA线程池简介
一 简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.uti ...
- pt-table-checksum 与pt-table-sync
http://www.lai18.com/user/481193.html?id=481193&p=1 主从数据校验使用percona-toolkit工具集的以下两个工具(主库上使用): pt ...
- PAT 1018
1018. Public Bike Management (30) There is a public bike service in Hangzhou City which provides gre ...
- PHP.1-网站开发概述
网站开发概述 网站开发从本质来说,就是软件开发 1.B/S软件体系统结构 BS:浏览器与服务器的结构[降低客户端电脑的负荷,减轻维护成本,对CS的改进,可随时随地进行业务处理] #对美工要求比较高,注 ...
- [转]一步步教你如何在 Visual Studio 2013 上使用 Github
介绍 我承认越是能将事情变简单的工具我越会更多地使用它.尽管我已经知道了足够的命令来使用Github,但我宁愿它被集成到IDE中.在本教程中,我会告诉你使用Visual Studio 2013如何实现 ...
- Android(java)学习笔记97:Scanner类使用
package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: * A:导包 * B:创建对象 * C:调用方法 * * System类下有一个静态 ...
- Angular学习资源汇集
网站 官网:www.angularjs.org 中文官网(社区):www.angularjs.cn 博客 流浪猫的窝 粉丝日记:AngularJS体验式编程系列文章 一介布衣 文档 GitCafe A ...