ASP.NET MVC实践系列9-filter原理与实践
2009-11-24 18:05
501 查看
filter实际上是一个特性(attribute),它提供了一种向controller 或 action中添加某些任务的方法,当controller 或 action被调用时,会触发filter中定义的相应方法。filter应该算AOP的一种实现方式,关于AOP的内容大家可以参考张逸的文章http://www.cnblogs.com/wayfarer/articles/241024.html,图文并茂对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中的页面缓存机制非常相似。
这里我们也可以统一的配置时间和条件
TestOrder属性类
1 using System.Web.Mvc;
2 using System.Collections.Generic;
3 using System.IO;
4 namespace FilterDemo.Controllers
5 {
6 public class TestOrderAttribute : FilterAttribute, IResultFilter, IActionFilter, IAuthorizationFilter, IExceptionFilter
7 {
8 #region IResultFilter 成员
9
10 public void OnResultExecuted(ResultExecutedContext filterContext)
11 {
12 Write( "OnResultExecuted");
13
14 }
15
16 private static void Write(string methodName)
17 {
18 StreamWriter sw = new StreamWriter("c:\\test.txt",true);
19 sw.WriteLine(methodName);
20 sw.Close();
21 }
22
23 public void OnResultExecuting(ResultExecutingContext filterContext)
24 {
25 Write( "OnResultExecuting");
26 }
27
28 #endregion
29
30 #region IActionFilter 成员
31
32 public void OnActionExecuted(ActionExecutedContext filterContext)
33 {
34 Write( "OnActionExecuted");
35 }
36
37 public void OnActionExecuting(ActionExecutingContext filterContext)
38 {
39 Write( "OnActionExecuting");
40 }
41
42 #endregion
43
44 #region IAuthorizationFilter 成员
45
46 public void OnAuthorization(AuthorizationContext filterContext)
47 {
48 Write("OnAuthorization");
49 }
50
51 #endregion
52
53 #region IExceptionFilter 成员
54
55 public void OnException(ExceptionContext filterContext)
56 {
57 Write("OnException");
58 filterContext.ExceptionHandled = true;
59 }
60
61 #endregion
62 }
63
64 }
使用
[TestOrder]
public ActionResult TestFilterOrder()
{
// throw new Exception("lfm");
return View();
}
前端
<%throw new Exception("异常出现"); %>
这时候我们打开c:\test.txt得到的结果为:
OnAuthorization
OnActionExecuting
OnActionExecuted
OnResultExecuting
OnResultExecuted
OnException
四、参考
《Professional ASP.NET MVC 1.0》
/article/4635235.html
http://www.cnblogs.com/wayfarer/articles/241024.html
/article/4622488.html
五、源码
我的ASP.NET MVC实践系列
ASP.NET MVC实践系列1-UrlRouting
ASP.NET MVC实践系列2-简单应用
ASP.NET MVC实践系列3-服务器端数据验证
ASP.NET MVC实践系列4-Ajax应用
ASP.NET MVC实践系列5-结合jQuery
ASP.NET MVC实践系列6-Grid实现(上)
ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)
ASP.NET MVC实践系列8-对查询后分页处理的解决方案
其他:
在ASP.NET MVC中对表进行通用的增删改
一、我们先来看看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中的页面缓存机制非常相似。
这里我们也可以统一的配置时间和条件
TestOrder属性类
1 using System.Web.Mvc;
2 using System.Collections.Generic;
3 using System.IO;
4 namespace FilterDemo.Controllers
5 {
6 public class TestOrderAttribute : FilterAttribute, IResultFilter, IActionFilter, IAuthorizationFilter, IExceptionFilter
7 {
8 #region IResultFilter 成员
9
10 public void OnResultExecuted(ResultExecutedContext filterContext)
11 {
12 Write( "OnResultExecuted");
13
14 }
15
16 private static void Write(string methodName)
17 {
18 StreamWriter sw = new StreamWriter("c:\\test.txt",true);
19 sw.WriteLine(methodName);
20 sw.Close();
21 }
22
23 public void OnResultExecuting(ResultExecutingContext filterContext)
24 {
25 Write( "OnResultExecuting");
26 }
27
28 #endregion
29
30 #region IActionFilter 成员
31
32 public void OnActionExecuted(ActionExecutedContext filterContext)
33 {
34 Write( "OnActionExecuted");
35 }
36
37 public void OnActionExecuting(ActionExecutingContext filterContext)
38 {
39 Write( "OnActionExecuting");
40 }
41
42 #endregion
43
44 #region IAuthorizationFilter 成员
45
46 public void OnAuthorization(AuthorizationContext filterContext)
47 {
48 Write("OnAuthorization");
49 }
50
51 #endregion
52
53 #region IExceptionFilter 成员
54
55 public void OnException(ExceptionContext filterContext)
56 {
57 Write("OnException");
58 filterContext.ExceptionHandled = true;
59 }
60
61 #endregion
62 }
63
64 }
使用
[TestOrder]
public ActionResult TestFilterOrder()
{
// throw new Exception("lfm");
return View();
}
前端
<%throw new Exception("异常出现"); %>
这时候我们打开c:\test.txt得到的结果为:
OnAuthorization
OnActionExecuting
OnActionExecuted
OnResultExecuting
OnResultExecuted
OnException
四、参考
《Professional ASP.NET MVC 1.0》
/article/4635235.html
http://www.cnblogs.com/wayfarer/articles/241024.html
/article/4622488.html
五、源码
我的ASP.NET MVC实践系列
ASP.NET MVC实践系列1-UrlRouting
ASP.NET MVC实践系列2-简单应用
ASP.NET MVC实践系列3-服务器端数据验证
ASP.NET MVC实践系列4-Ajax应用
ASP.NET MVC实践系列5-结合jQuery
ASP.NET MVC实践系列6-Grid实现(上)
ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)
ASP.NET MVC实践系列8-对查询后分页处理的解决方案
其他:
在ASP.NET MVC中对表进行通用的增删改
相关文章推荐
- Asp.Net MVC 进阶篇之Filter系列
- ASP.NET MVC实践系列12-表单处理
- 【深入ASP.NET原理系列】--ASP.NET请求管道对Asp.Net WebForm和Asp.Net Mvc的处理通用部分
- ASP.NET MVC实践系列6-Grid实现(上)
- ASP.NET MVC实践系列8-对查询后分页处理的解决方案
- ASP.NET MVC实践系列3-服务器端数据验证
- ASP.NET MVC实践系列4-Ajax应用
- ASP.NET MVC实践系列10-单元测试
- ASP.NET MVC实践系列12-表单处理(转)
- ASP.NET MVC实践系列-UrlRouting
- Asp.Net MVC 系列--进阶篇之Filter
- ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
- ASP.NET MVC实践系列1-UrlRouting
- Asp.Net MVC && SmartDAL项目实践系列
- ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)
- [导入]ASP.NET MVC框架开发系列课程(7):Action Filter.zip(16.83 MB)
- ASP.NET MVC实践系列5-结合jQuery
- ASP.NET MVC 实践系列4-Ajax应用
- ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用
- ASP.NET MVC实践系列2-简单应用