ASP.NET MVC AOP-Filter
2015-06-06 22:08
656 查看
软件开发模式从面向过程(POP)发展到面向对象(OOP)之后,软件模块之间的组织方式发生了很多变化,衍生出了很多可插拔的模块化组件,给软件的灵活架构方面带来了丰富多彩的内容。面相对象的思维方式可谓功不可没,在日趋复杂的应用系统中,有很多基本的业务逻辑,跟具体的业务关系很小,甚至没有关系,比如日志,参数校验,权限,等等各种常规功能,这时候我们就需要面相切面编程-AOP
ASP.NET MVC 在控制器加载及执行过程中,为了让用户能够扩展控制器执行过程中的功能,提供了让用户重写OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted几个方法的机制。这样用户就可以灵活地控制Action和Result的执行过程。其实,这就是AOP在ASP.NET
MVC 中最好的实现,也是ASP.NET MVC 在设计中非常具有借鉴意义的部分,为我们设计具有AOP机制的模块具有很好的借鉴意义。
ASP.NET MVC 在控制器加载及执行过程中,为了让用户能够扩展控制器执行过程中的功能,提供了让用户重写OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted几个方法的机制。这样用户就可以灵活地控制Action和Result的执行过程。其实,这就是AOP在ASP.NET
MVC 中最好的实现,也是ASP.NET MVC 在设计中非常具有借鉴意义的部分,为我们设计具有AOP机制的模块具有很好的借鉴意义。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AspNetMvcFilterDemo.Filters { public class MyFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.HttpContext.Response.Write("Method Name:OnActionExecuting<br/>"); //输出请求的Controller 与action名称 String controllerName = filterContext.RouteData.Values["controller"].ToString(); String actionName = filterContext.RouteData.Values["action"].ToString(); String message = String.Format("Controller :{0}<br/>action:{1}<br/>", controllerName, actionName); filterContext.HttpContext.Response.Write(message); filterContext.HttpContext.Response.Write("------------------------------------<br>"); //base.OnActionExecuting(filterContext); } public override void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.HttpContext.Response.Write("Method Name:OnActionExecuted<br/>"); //输出请求的Controller 与action名称 String controllerName = filterContext.RouteData.Values["controller"].ToString(); String actionName = filterContext.RouteData.Values["action"].ToString(); String message = String.Format("Controller :{0}<br/>action:{1}<br/>", controllerName, actionName); filterContext.HttpContext.Response.Write(message); filterContext.HttpContext.Response.Write("------------------------------------<br/>"); //base.OnActionExecuted(filterContext); } public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.Response.Write("Method Name:OnResultExecuting<br/>"); //输出请求的Controller 与action名称 String controllerName = filterContext.RouteData.Values["controller"].ToString(); String actionName = filterContext.RouteData.Values["action"].ToString(); String message = String.Format("Controller :{0}<br/>action:{1}<br/>", controllerName, actionName); filterContext.HttpContext.Response.Write(message); filterContext.HttpContext.Response.Write("------------------------------------<br/>"); //base.OnResultExecuting(filterContext); } public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.Write("Method Name:OnResultExecuted<br/>"); //输出请求的Controller 与action名称 String controllerName = filterContext.RouteData.Values["controller"].ToString(); String actionName = filterContext.RouteData.Values["action"].ToString(); String message = String.Format("Controller :{0}<br/>action:{1}<br/>", controllerName, actionName); filterContext.HttpContext.Response.Write(message); filterContext.HttpContext.Response.Write("------------------------------------<br/>"); //base.OnResultExecuted(filterContext); } } }我们就可以在控制器上使用Attribute
[MyFilter] public ActionResult Index() { return View(); }效果:
相关文章推荐
- 树莓派--Raspbian启用root账户,禁用休眠
- Asp.Net北大青鸟总结(四)-使用GridView实现真假分页
- ASP.NET MVC 源码分析(二) —— 从 IRouteBuilder认识路由构建
- AspNet MVC4 教学-27:Asp.Net MVC4 自定义helper及function的快速Demo
- asp.net连接MySQL数据库错误-Out of sync with server
- asp.net中验证控件的使用方法
- VNC connect to raspberry pi under ubuntu desktop environment
- ASP.Net页面刷新后自动滚动到原来位置
- ASP.NET获取客户端及服务器的信息
- Asp.net中向前端输出JS的一些调用
- Aspose Cells如何进行数据验证(后附下载地址)
- ASP.NET MVC5项目自带的一段代码( ViewBag.StatusMessage = message == ManageMessageId.ChangePas
- [Asp.net 5] Logging-其他日志系统的实现
- ASP.NET MVC 源码分析(一)
- asp-net-web-api
- AspNet MVC4 教学-26:Asp.Net MVC4 原生态Sql技术快速应用Demo
- asp.net服务器控件onclick带参数
- ASP.NET多文件批量打包下载
- GStreamer 1.2 on the Raspberry Pi
- ASP.NET系统开发(一):层层递进之SQLHelper助手类的持续优化