MVC过滤器 实现AOP(入门)

在大型开发项目中,总会提到面向切面编程的概念,即AOP。OOP的思想,对任何事物来说,都具有方法和属性,不存在无主的方法。

什么是AOP呢?开发切面有什么好处呢?

AOP面向的是一个切面。使用切面,把公共的功能抽出来。单独开发。然后将公共部分的实现,在开发人员不知情的情况下,添加进去。

开发人员,一般都只是开发自己的功能。专注自己的业务逻辑。

如果,在某一部分的功能开发中,都必须处于登录状态,那么里面每个功能中都写  判断用户状态的代码。

这样开发,代码重复性高,不易维护,开发慢……

为了提高编程效率,不得不将一些公共的方法抽离出来。

但是,问题又来了。方法抽出来了。在每个功能中,都需要调用该方法。

一不小心少些一个,又是麻烦事……

怎样,才能避免这种情况呢?引入AOP

在MVC前台框架中,MVC中Controller中的Filter可以将公共的代码抽离出来。

定义过滤器:

public class TestFilterAttribute:ActionFilterAttribute
    {
        public string Message { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            filterContext.HttpContext.Response.Write("Action执行之前"+Message+"<br />");
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            filterContext.HttpContext.Response.Write("Action执行之后"+Message+"<br />");
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
            filterContext.HttpContext.Response.Write("返回Result之前"+Message+"<br />");
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            filterContext.HttpContext.Response.Write("返回Result之后"+Message+"<br />");
        }
    }

编写Controller方法,使用过滤器:

[TestFilter(Message="Action")]
public ActionResult Index()
{
     HttpContext.Response.Write("Action正在执行···<br />");
     return Content("正在返回Result···<br />");
}

执行顺序效果:

利用MVC中的Filter可以实现日志。将写日志的方法放到Filter中,这样Controller中的方法,在执行的过程中就会写日志。

而开发人员不需要开发 写日志的功能。

对于面向切面的编程,当然不会局限在某一层中。而使用MVC中的Filter仅仅解决在前台的问题。至于将切面控制到其他层中,请继续深入Spring.net
AOP。

时间: 2024-11-08 22:48:10

MVC过滤器 实现AOP(入门)的相关文章

ASP.NET MVC 过滤器(三)

ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中,这种编程模式就是横向的插入点),言归正传,我们还是以学习过滤器为主.对于IAuthorizationFilter授权认证过滤器的使用篇幅,我知道怎么用但是写不出来,里面包含知识点很多,功底尚浅写了一半又给删掉了,宁愿不发也不能坑人,在后面的学习中假使我可以掌握了,一定会及时的写出来跟大家分享.这个目

MVC过滤器使用案例:统一处理异常顺道精简代码

重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并通过对异常处理的封装达到精简代码的目的.具体有两种处理方法: 方法1:封装一个包含try{}catch{}finally{}的异常处理逻辑的方法类,将别的方法作为参数传入该方法,在页面内调用封装后的方法,大体代码如下: public class Process { public static bool Exe

ASP.NET MVC过滤器(一)

MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等.MVC 中包含Authorization filter.Action filter.Result filter.Exception filter 四种过滤器. APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这

MVC过滤器详解和示例

原文  http://blog.csdn.net/ankeyuan/article/details/29624005 MVC过滤器一共分为四个:ActionFilter(方法过滤器),ResultFilter(结果过滤器,感觉不是很好听,就这样叫吧),AuthorizationFilter(授权过滤器),ExceptionFilter(异常处理过滤器) 过滤器类型 接口 默认实现 描述 Action IActionFilter ActionFilterAttribute 在动作方法之前及之后运行

ASP.NET MVC 过滤器说明

ASP.NET MVC 过滤器分别如下: 过滤器执行顺序:  

MVC过滤器基本使用

Action过滤器 /// <summary> /// 执行代码前执行 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { //1.显示触发过滤器action方法的名称 string actionName = filterC

asp.net mvc,基于aop实现的接口访问统计、接口缓存等

其实asp.net 上aop现有的框架应该蛮多的,比如静态注入式的PostSharp(新版本好像已经商业化了,旧版本又不支持.net4.0+),或者通过反射的(性能会降低). 本文则是通过mvc其中一种方法拦截器ActionFilter(参考网上已经有很多类似例子). 首先新建一个日志控制类,命名为ApiLogAttribute,继承于ActionFilterAttribute /// <summary> /// 记录访问日志以及站点安全检查 /// </summary> publ

ASP.NET MVC 过滤器(一)

ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢,在MVC框架中提供了一种机制在控制器方法执行之前我们还可以通过这种机制来做一些横向切面的操作,这种机制的实现就是过滤器了,在本篇和后续的篇幅中将会对几种过滤器做一番讲解,并且会对过滤器在框架中的一个执行过程进行粗略的讲解. ASP.NET MVC过滤器 过滤器在系统框架中的整体对象模型 IAuth

ASP.NET MVC 过滤器(四)

ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP.NET MVC过滤器 过滤器在系统框架中的整体对象模型 IAuthorizationFilter授权认证过滤器的执行过程 使用IAuthorizationFilter过滤器 IActionFilter行为过滤器的执行过程 自定义实现IActionFilter行为过滤器 异常过滤器的使用 自定义实现