• asp.net mvc中的拦截器


    asp.net mvc中的拦截器

    摘要:     本文将讨论asp.net mvc中的过滤器。

    从程序员到AOP

          我们先想像一个场景,就是程序员开发软件,他是怎么工作的呢?我们都知道,普通的程序员只需要根据需求文档开发相应的功能即可,他不用和客户谈论软件需求,不用理会软件卖多少钱,他要做的事很单一:开发软件!

         当一个公司找软件开发商做项目的时候,有专门的人员会跟客户谈需求,谈完需求,做好设计,写好文档,再把相关的文档送到程序员手上,程序员只需要根据文档开发相应的功能,当程序开发完成之后,会有相应的测试组测试软件各各方面的东西,然后测试通过再交到客户手上!

        这个场景就是一个典型的拦截器,也叫AOP(面向切面编程),程序员可以看成是一个业务组件,他有个方法就是“开发”,至于与客户的交互,以及软件开发后的后期工作,就不是程序员应该关心的事了,于是我们可以把测试组看成是一个拦截器,当测试组发现问题时拦截软件流向客户,返还给程序员要求修改。

        对于这个场景,我们可以看看有什么好处。首先程序员的职责单一了,不必理会和他无关的事,可以专注他的工作:开发。而且拦截器可以得到复用,例如一个软件开发商可以只请一个测试员测试5个程序员写出来的程序,这样拦截器的代码就可以减少重复了!

       OK,回到我们的主题,在ASP.NET MVC中,有三种拦截器:Action拦截器、Result拦截器和Exception拦截器,所谓的拦截器也没有什么的,只是写一个类,继承另一个类和一个接口,顺便实现接口里面的方法而以拉!下面我们一一实现!

     public class ExceptionFillters : FilterAttribute,IExceptionFilter
        {
            //发生异常时会执行这段代码
            public void OnException(ExceptionContext filterContext)
            {
                //在这里你可以记录发生异常时你要干什么,比例写日志

                //这一行告诉系统,这个异常已经处理了,不用再处理
                filterContext.ExceptionHandled = true;
            }
        }
        public class ActionFillters : FilterAttribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext filterContext)
            {
                //执行action后执行这个方法 比如做操作日志
            }

            public void OnActionExecuting(ActionExecutingContext filterContext)
            {
               //执行action前执行这个方法,比如做身份验证
            }
        }
        public class ResultFillters : FilterAttribute, IResultFilter
        {
            public void OnResultExecuted(ResultExecutedContext filterContext)
            {
               //执行完action后跳转后执行
            }

            public void OnResultExecuting(ResultExecutingContext filterContext)
            {
                //执行完action后跳转前执行
            }
        }

    使用的时候更是方便,利用C#里面的特性,真是方便极了,请看代码!(PS:action和controller都一樣!)

            [ResultFillters]
            [ActionFillters]
            [ExceptionFillters]
            public ActionResult Index()
            {
                ViewData["Message"] = "Welcome to ASP.NET MVC!";
                return View();
            }

    看到了沒有,只要在action上面寫三個Attibute,一切都就都完成了,其它的事情都是讓框架幫你完成了,相對在webForm裡面想使用Aop,這裡可以簡單百倍呀!試一下吧,只看不練一下子就會忘記的,這裡只是給出核心代码,朋友自己试一下吧!

          通过本文的讨论,相信大部分朋友都可以掌握基本的应用了,当然,我也可能会理解错其中的一些东西,希望大家指出,欢迎讨论!

    补:自己看了一下,觉得好像写得不怎么样,担心很多人看不懂,限于写作水平有限,如果看不明白者,欢迎提出讨论!

    本文参考地址:http://www.cnblogs.com/leoo2sk/

  • 相关阅读:
    .NET设计模式(19):观察者模式(Observer Pattern)
    漂亮的信息提示
    工厂方法模式(Factory Method)
    .NET设计模式(16):模版方法(Template Method)
    通过序列化实现深拷贝
    C#委托的妙文,让你知道如何发挥委托的作用
    .NET设计模式(12):外观模式(Façade Pattern)
    动态方法DynamicMethod简例
    ado.net中的自动获取存储过程参数
    设计模式之——简单工厂模式
  • 原文地址:https://www.cnblogs.com/jianghaidong/p/4745174.html
Copyright © 2020-2023  润新知