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 过滤器开发与使用的更多相关文章

  1. Asp.net Mvc模块化开发之分区扩展框架

    对于一个企业级项目开发,模块化是非常重要的. 默认Mvc框架的AreaRegistration对模块化开发真的支持很好吗?真的有很多复杂系统在使用默认的分区开发的吗?我相信大部分asp.net的技术团 ...

  2. Asp.net Mvc模块化开发系列(目录)

    模块化开发是非常重要的,模块化开发是个系统性问题,为此我觉得有必须要写一个系列的文章才能基本说的清楚 那又为什么要写一个目录呢? 其一.是对我昨天承诺写一个系列新的文章的回应 其二.是先写出一个大纲, ...

  3. ASP.NET MVC 过滤器(一)

    ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...

  4. ASP.NET MVC 过滤器(三)

    ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...

  5. ASP.NET MVC 过滤器(四)

    ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP ...

  6. ASP.NET MVC 过滤器(五)

    ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...

  7. ASP.NET MVC 网站开发总结(三) ——图片截图上传

    本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> < ...

  8. ASP.NET MVC框架开发系列课程 (webcast视频下载)

    课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...

  9. 像asp.net Mvc一样开发nodejs+express Mvc站点

    像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...

随机推荐

  1. pod install warning

    warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777 解决方法: sudo chmod 775 /usr/l ...

  2. Educational Codeforces Round 1 B. Queries on a String 暴力

    B. Queries on a String Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/59 ...

  3. 安卓Activity界面切换添加动画特效

    在Android 2.0之后有了overridePendingTransition() ,其中里面两个参数,一个是前一个activity的退出两一个activity的进入, @Override pub ...

  4. IOS AutoLayout 文章

    开始iOS 7中自动布局教程(一) 开始iOS 7中自动布局教程(二) 代码的方式自动布局 自动布局时计算Cell高度

  5. IOS App动态更新

    框架 JSPatch WaxPatch react-native   方案对比 目前已经有一些方案可以实现动态打补丁,例如WaxPatch,可以用Lua调用OC方法,相对于WaxPatch,JSPat ...

  6. 从一行代码里面学点JavaScript

    从一行代码里面学点JavaScript 现如今,JavaScript无处不在,因此关于JavaScript的新知识也是层出不穷.JavaScript的特点在于,要学习它的语法入门简简单,但是要精通使用 ...

  7. 第1章 游戏之乐——NIM(3)两堆石头的游戏

    NIM(3)两堆石头的游戏 1. 问题描述 假设有两堆石头,有两个玩家会根据如下的规则轮流取石头:每人每次可以从两堆石头中各取出数量相等的石头,或者仅从一堆石头中取出任意数量的石头:最后把剩下的石头一 ...

  8. Spring 3.1 Environment Profiles--转载

    原文地址:http://gordondickens.com/wordpress/2012/06/12/spring-3-1-environment-profiles/ Profiles Spring ...

  9. Calendar Game

    http://poj.org/problem?id=1082 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4820   A ...

  10. [课程相关]homework-01

    我的github博客大概是一年前创建的.现在已经想不起来当时是怎么接触到github的了,大概是从某一个网站看到的吧.注册完帐号以后很长一段时间都没有真正的去使用github,主要原因就是网站是英文的 ...