MVC之Control中使用AOP

原文转载自http://www.cnblogs.com/iamlilinfeng/archive/2013/03/02/2940162.html

本文目标

一、能够使用Control中的AOP实现非业务需求的功能

本文目录

一、ActionFilterAttribute类

二、实现自定义Attribute

一、ActionFilterAttribute类

Action筛选条件的基类

 1 using System;
 2
 3 namespace System.Web.Mvc
 4 {
 5     // Summary:
 6     //     Represents the base class for filter attributes.
 7     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
 8     public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
 9     {
10         // Summary:
11         //     Initializes a new instance of the System.Web.Mvc.ActionFilterAttribute class.
12         protected ActionFilterAttribute();
13
14         // Summary:
15         //     Called by the ASP.NET MVC framework after the action method executes.
16         //
17         // Parameters:
18         //   filterContext:
19         //     The filter context.
20         public virtual void OnActionExecuted(ActionExecutedContext filterContext);
21         //
22         // Summary:
23         //     Called by the ASP.NET MVC framework before the action method executes.
24         //
25         // Parameters:
26         //   filterContext:
27         //     The filter context.
28         public virtual void OnActionExecuting(ActionExecutingContext filterContext);
29         //
30         // Summary:
31         //     Called by the ASP.NET MVC framework after the action result executes.
32         //
33         // Parameters:
34         //   filterContext:
35         //     The filter context.
36         public virtual void OnResultExecuted(ResultExecutedContext filterContext);
37         //
38         // Summary:
39         //     Called by the ASP.NET MVC framework before the action result executes.
40         //
41         // Parameters:
42         //   filterContext:
43         //     The filter context.
44         public virtual void OnResultExecuting(ResultExecutingContext filterContext);
45     }
46 }

OnActionExecuting:在Action执行之前执行该方法

OnActionExecuted:在Action执行之后执行该方法

OnResultExecuting:在Result执行之前执行该方法

OnResultExecuted:在Result执行之后执行该方法

二、实现自定义Attribute

在MVC框架基础上实现自定义Attribute只需实现ActionFilterAttribute中的虚方法即可

1.代码

 1 using System.Web.Mvc;
 2
 3 namespace MVC3.Demo.App_Code
 4 {
 5     public class LogActionFilter : ActionFilterAttribute
 6     {
 7         public string LogMessage { get; set; }
 8
 9         public override void OnActionExecuting(ActionExecutingContext filterContext)
10         {
11             filterContext.HttpContext.Response.Write(@"在Action执行之前执行" + LogMessage + "<br />");
12             base.OnActionExecuting(filterContext);
13         }
14
15         public override void OnActionExecuted(ActionExecutedContext filterContext)
16         {
17             filterContext.HttpContext.Response.Write(@"在Action执行之后执行" + LogMessage + "<br />");
18             base.OnActionExecuted(filterContext);
19         }
20
21         public override void OnResultExecuting(ResultExecutingContext filterContext)
22         {
23             filterContext.HttpContext.Response.Write(@"在Result执行之前执行" + LogMessage + "<br />");
24             base.OnResultExecuting(filterContext);
25         }
26
27         public override void OnResultExecuted(ResultExecutedContext filterContext)
28         {
29             filterContext.HttpContext.Response.Write(@"在Result执行之后执行" + LogMessage + "<br />");
30             base.OnResultExecuted(filterContext);
31         }
32     }
33 }

2.使用

1 [LogActionFilter(LogMessage = "日志写入:Validation方法")]
2          public ActionResult Validation()
3          {
4              return View();
5          }

3.效果

时间: 2024-11-07 11:45:26

MVC之Control中使用AOP的相关文章

Control中的AOP实现非业务需求

一.能够使用Control中的AOP实现非业务需求的功能 本文目录 一.ActionFilterAttribute类 二.实现自定义Attribute 一.ActionFilterAttribute类 Action筛选条件的基类 1 using System; 2 3 namespace System.Web.Mvc 4 { 5 // Summary: 6 // Represents the base class for filter attributes. 7 [AttributeUsage(

ASP.NET MVC中有关AOP的编程

AOP(Aspect oriented programming)面向切面编程,主要意思是把相同.相似的并且零散的逻辑抽离出来,统一处理,这样不仅维护起来方便,也使得代码更加关注自己本身,清晰明了. 比如我们常见的权限检查,验证登陆,异常处理等都是散乱在系统各个地方,比如管理员在登陆状态才可以添加一个学生信息: public ActionResult AddStudent(Student student) { if (currentUser != null) { StudentDAL.Add(st

spring mvc中的AOP和interceptors

项目中采用Interceptor来过滤URL来决定哪些可以在不登录的情况下访问,哪些必须要登录才可以访问: public class SessionTimeoutInterceptor implements HandlerInterceptor { 此时需要在servlet.xml中配置<mvc:interceptor> 同时亦采用AOP来记录日志,使用注解方式 @Component@Aspect 同时在servlet.xml中配置 <aop:aspectj-autoproxy>&

利用多态,实现一般处理程序(ashx)中的AOP(切面编程)

本文是对工作中的项目进行代码优化(完善登陆验证的AOP切面编程)时,所遇到的各种解决方案思考过程. 项目背景:由ashx+nvelocity构建的简单B/S问卷系统,现需要优化登录验证环节(时隔若干个月在回顾代码果然是一个痛苦的过程~) nvelocity是velocity框架针对.net的版本,核心是拼html字符串后返回客户端,与MVC的前后端代码隔离有异曲同工之妙.加之一般处理程序ashx不需要像asp.net那样走生成控件树的过程,执行上更是省时省力.故简单系统用ashx+nveloci

Spring中的AOP(五)——在Advice方法中获取目标方法的参数

摘要: 本文介绍使用Spring AOP编程中,在增强处理方法中获取目标方法的参数,定义切点表达式时使用args来快速获取目标方法的参数. 获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Ob

Net中的AOP

.Net中的AOP系列之<单元测试切面> 返回<.Net中的AOP>系列学习总目录 本篇目录 使用NUnit编写测试 编写和运行NUnit测试 切面的测试策略 Castle DynamicProxy测试 测试一个拦截器 注入依赖 PostSharp测试 对PostSharp切面进行单元测试 注入依赖 PostSharp和测试的问题 小结 本节的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS 2013 Update 5(建议最好使用集成了Nuget的VS版本,VS

MVC:Control与View传值

MVC页面传值的方式主要有三种: 第一种: 采用ViewData.采用键值对的方式,ViewData存储的是一个object类型,传到view层需要强类型转换:使用起来类似于字典集合模式: ViewData["key"]="value" 第二种: 采用ViewBag.ViewBag是ViewData模式的一部分,采用模式也就是ViewBag.key=value. PS: 1.关于ViewData和ViewBag对比如下 ViewData与ViewBag对比: Vie

OAF_OAF架构MVC系列 - Control的概述(概念)

2014-06-18 BaoXinjian 一.摘要 Control层位于Model层和View层的中间,连接了Model层和View层, 主要存在两个功能 操作/初始化UI和数据 接受和处理页面上的用户的各种事件,并进行分发 本文的基本结构 Designand Create an OA Controller - 基本概念和建立 Handling an HTTP GET - 如何处理HTTP GET请求 Data层面 - 进行初始化 WebBean层面 WebBean层面 - 动态修改WebBe

转-Spring Framework中的AOP之around通知

Spring Framework中的AOP之around通知 http://blog.csdn.net/xiaoliang_xie/article/details/7049183 标签: springaop设计模式beanintegerclass 2011-12-07 11:39 6108人阅读 评论(0) 收藏 举报 在第一部分,您看到了如何使用Spring AOP来实现跟踪和记录方面.跟踪和记录都是"消极"方面,因为它们的出现并不会对应用程序的其他行为产生影响.它们都使用了消极的b