您的位置:首页 > 编程语言 > ASP

ASP.NET MVC笔记 之 Action 过滤器

2009-04-07 15:10 435 查看
Action 过滤器在代码中体现为添加到Action上方的属性,MVC框架包含了一些过滤器,如:
OutputCache –指示Controller在指定时间内缓存返回的结果。
HandleError –处理Contrller中Action抛出的异常
Authorize – 约束特定用户或角色对Action的访问
另外你还可以自己定义过滤器,比如:你想使用自定义的验证机制;你想修改Action返回的数据等等。
使用Action 过滤器
Action 过滤器不仅可以控制单个Action,也可以控制整个Contrller。同时,一个Action可以应用多个过滤器。比如:

public class DataController : Controller
{
[OutputCache(Duration=10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}
这个Action返回了当前时间,但是你若在10秒钟内刷新界面,你会一直得到同一个值,因为这里使用了OutputCache(Duration=10)
过滤器的类型
ASP.NET MVC 框架支持以下几种过滤器:
1、Authorization 过滤器– 实现了 IAuthorizationFilter 接口。这一类的过滤器用来实现用户验证和对Action的访问授权。比如Authorize 就属于Authorization 过滤器。
2、Action 过滤器– 实现了 IActionFilter 接口。它可以包含一些Action执行前或者执行后的逻辑,比如有一些过滤器专门用来修改Action返回的数据。
3、Result 过滤器– 实现了 IResultFilter 接口。它可以包含一些view result生成前或者生成后的逻辑,比如有一些过滤器专门用来修改视图向浏览器展现前的结果。
4、Exception 过滤器– 实现了IExceptionFilter 接口。它用以用来处理Action或者Result的错误,也可以记录错误。
过滤器的默认执行顺序也和上面的列表相同,比如Authorization 过滤器会先于Action 过滤器执行,而Exception 过滤器总会在最后执行。当然你也可以根据需要通过Order属性设定过滤器执行的顺序。
自定义过滤器
自定义过滤器必须继承System.Web.Mvc.FilterAttribute ,并且实现上述几个接口中的一个或者多个。MVC框架为了方便开发人员,预定义了一个ActionFilterAttribute 类,它已实现了IActionFilter 和IResultFilter 接口。你可以重载ActionFilterAttribute 类中以下几个方法:
OnActionExecuting – 在Action执行之前调用。
OnActionExecuted – 在Action执行之后调用。
OnResultExecuting – 在Result产生之前调用。
OnResultExecuted – 在Result产生之前调用。
下面示例一个类:

Code
public static class AdHelper
{
public static void RenderBanner(this HtmlHelper helper)
{
var context = helper.ViewContext.HttpContext;
context.Response.WriteSubstitution(RenderBannerInternal);
}

private static string RenderBannerInternal(HttpContext context)
{
var ads = new List<string>
{
"/ads/banner1.gif",
"/ads/banner2.gif",
"/ads/banner3.gif"
};

var rnd = new Random();
var ad = ads[rnd.Next(ads.Count)];
return String.Format("<img src='{0}' />", ad);
}

}

那么你就可以在页面上如此调用:

<% Html.RenderBanner(); %>
这样就会每刷新一次页,改变一次图像。但是数据内容却还是缓存的,并不会因为你刷新了页面而再次查询数据库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: