软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 网络编程 > ASP.NET > ASP.NET MVC实践系列9之filter原理与实践

ASP.NET MVC实践系列9之filter原理与实践

filter实际上是一个特性(attribute),它提供了一种向controller 或 action中添加某些任务的方法,当controller 或 action被调用时,会触发filter中定义的相应方法。filter应该算AOP的一种实现方式,关于AOP的内容大家可以参考这里,图文并茂对AOP讲解的十分清楚。所以我们就可以在某种程度上利用filter来分解横向和纵向的应用,比方说日志,权限,缓存,防盗链等等应用。

一、我们先来看看ASP.NET MVC 框架提供的几种默认filter类型:
1、Authorize:

准备工作:进入C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727文件夹,双击aspnet_regsql.exe选择好相应的数据库,创建membership,AuthorizeAttribute使用membership来进行权限验证的,所以我们需要先在membership中准备一个用户lfm,一个角色Admin,我们使用studio的项目-》ASP.NET配置创建即可。

[Authorize(Roles="Admin")]
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";

return View();
}
如果lfm不属于Admin角色时Index页是不能访问的

2、OutputCache:

[OutputCache(Duration=60, VaryByParam="none")]
public ActionResult About()
{
return View();
}
然后我们修改About加入:

<%=DateTime.Now.ToString() %>

我们会发现在一分钟内我们刷新About页面其输出并不改变。这个和webform中的页面缓存机制非常相似。

这里我们也可以统一的配置时间和条件

配置文件
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="MyProfile" duration=”60” varyByParam=”none” />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
Controler中输入

[OutputCache(CacheProfile="MyProfile")]
public ActionResult About()
{
return View();
}
3、Exception

Exception
[HandleError(ExceptionType = typeof(ArgumentException), View = "Error")]
public ActionResult GetProduct(string name)
{
if (name == null)
{
throw new ArgumentNullException("名字为空");
}
return View();
}
标明HandleError属性后的Action,当内部出现异常时会根据异常类型跳转到相应的View,这里需要注意的是上面的源码在开发期无法看到效果,必须部署到iis上才能看到效果。实际上这个简单处理在项目中用处不大,一般我们都会写自己的异常处理方式,自定义异常处理我们一会再自定义filter中讲解。

相关阅读
网友评论
栏目导航
推荐软件