ASP.NET MVC中有关AOP的编程

  AOP(Aspect oriented programming)面向切面编程,主要意思是把相同、相似的并且零散的逻辑抽离出来,统一处理,这样不仅维护起来方便,也使得代码更加关注自己本身,清晰明了。

  比如我们常见的权限检查,验证登陆,异常处理等都是散乱在系统各个地方,比如管理员在登陆状态才可以添加一个学生信息:

        public ActionResult AddStudent(Student student)
        {
            if (currentUser != null)
            {
                StudentDAL.Add(student);
            }
            else
            {
                //do something else
            }
        } 

  本来一句StudentDAL.Add(student)就可以实现的功能,现在却要加上if else,还要处理异常,代码显得很难看,如果采用如下的方式:

        [HttpPost]
        [Authorize]
        public ActionResult AddStudent(Student student)
        {
            StudentDAL.Add(student);
            return View();
        }

  这种用AuthroizeAttribute特性来处理问题的方式,就是AOP的思想,不仅使代码更加清晰,而且还可以复用这个Attribute。

  Attribute只是一种实现方式,Attribute也是在调用具体的action前,通过反射得到Attribute,然后执行代码。像验证登陆可以放在基类Controller中去做判断,而一些细化的权限控制我们可以自定义Attribute来实现。

  下面是一个异常处理的例子,如果有一个统一的处理异常的逻辑,那么逻辑代码里就可以不用try catch,而是直接throw exception,会让代码更简洁。(并不是说有了统一处理就再不用try catch了,有些异常还是要去捕获,看具体业务需求,另外捕获不到异常的比如线程里的要注意catch)。

  

        public ActionResult AddStudent(Student student)
        {
            if (string.IsNullOrEmpty(student.Name))
            {
                throw new ArgumentException("name");
            }
            return View();
        }

        protected override void OnException(ExceptionContext filterContext)
        {
            string filePath = Server.MapPath("~/exception.txt");
            using (StreamWriter writer = System.IO.File.AppendText(filePath))
            {
                writer.WriteLine(filterContext.Exception.Message);
            }
            base.OnException(filterContext);
            Response.Redirect("~/Error/NotFound");
        }

  只要在Controller中重写OnException方法就可以处理该控制器中所有的异常,实现记录异常日志(利用Log4Net),跳转到自定义错误页面等。

  当然也可以自定义针对Action的异常处理特性。

  

public class ExceptionLogFilterAttribute : FilterAttribute, IExceptionFilter
    {
        public void OnException(ExceptionContext filterContext)
        {
            string filePath =HttpContext.Current.Server.MapPath("~/exception.txt");
            using (StreamWriter writer = System.IO.File.AppendText(filePath))
            {
                writer.WriteLine(filterContext.Exception.Message);
            }
            HttpContext.Current.Response.Redirect("~/Error/NotFound");
        }
    }

  

ASP.NET MVC中有关AOP的编程

时间: 2024-12-24 00:04:28

ASP.NET MVC中有关AOP的编程的相关文章

ASP.NET MVC中使用异步控制器

线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个版本,才能趋于规范. ASP.NET MVC 中为什么需要使用异步呢,IIS有一个线程池来处理用户的请求,当一个新的请求过来时,将调度池中的线程以处理该请求,然而,但并发量很高的情况下,池中的线程已经不能够满足这么多的请求时候,池中的每一个线程都处于忙的状态则在处理请求时将阻塞处理请求的线程,并且该

在 ASP.NET MVC 中使用异步控制器

线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个版本,才能趋于规范. ASP.NET MVC 中为什么需要使用异步呢,IIS有一个线程池来处理用户的请求,当一个新的请求过来时,将调度池中的线程以处理该请求,然而,但并发量很高的情况下,池中的线程已经不能够满足这么多的请求时候,池中的每一个线程都处于忙的状态则在处理请求时将阻塞处理请求的线程,并且该

ASP.NET MVC中设置跨域

ASP.NET MVC中设置跨域 1.什么是跨域请求 js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错.这是JS的同源策略限制,JS控制的并不是我们网站编程出现了问题.客户端(网页)和后台编程都可以有效解决这个问题.客户端可以通过JSONP来完成跨域访问:在ES6中为了解除同源策略问题,想出一个办法:当被请求网站为响应头respone添加了一个名为Access-Control-Allow-Origin的header,设置其值等于发起请求网站的

asp.net mvc中的拦截器

在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器,所谓的拦截器也没有什么的,只是写一个类,继承另一个类和一个接口,顺便实现接口里面的方法而以拉!下面我们一一实现! public class ExceptionFillters : FilterAttribute,IExceptionFilter    {        //发生异常时会执行这段代码        public void OnException(ExceptionContex

ASP.NET MVC如何正确运用异步编程技术

一.什么是同步和异步? 同步(英语:Synchronization),指对在一个系统中所发生的事件(event)之间进行协调,在时间上出现一致性与统一化的现象.说白了就是多个任务一个一个执行,同一时刻只有一个任务在执行. 异步(英语:Asynchronization),指的是让CPU暂时搁置当前请求的响应,处理下一个请求,当通过轮询或其他方式得到回调通知后,开始运行.多线程将异步操作放入另一线程中运行,通过轮询或回调方法得到完成通知,但是完成端口,由操作系统接管异步操作的调度,通过硬件中断,在完

log4net 使用总结- (2)在ASP.NET MVC 中使用

log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二.在站点根目录下增加log4net.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用ASP.NE

ASP.NET MVC中使用FluentValidation验证实体

1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的验证方式,同时FluentValidation还提供了表达式链式语法. 2.安装FluentValidation FluentValidation地址:http://fluentvalidation.codeplex.com/ 使用Visual Studio的管理NuGet程序包安装FluentVa

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编