zoukankan      html  css  js  c++  java
  • asp.net mvc Controller 模式下的 aop

    这个模式下的 aop 局限于 mvc 框架,因为它要继承 FilterAttribute, IActionFilter 。它两都在 system.web.mvc 命名空间下,所以仅支持在 Controller 中使用

    首页定义一个特性类,并继承 FilterAttribute, IActionFilter

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace aspmvc_demo.Attributes
    {
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
        public class CommonMethodHoldAttribute : FilterAttribute, IActionFilter
        {
            public void OnActionExecuting(ActionExecutingContext filterContext)
            {
                string url = string.Format(@"{0}{1}", filterContext.RouteData.Values["controller"], filterContext.RouteData.Values["action"]);
                filterContext.HttpContext.Response.Write(string.Format("{0} 执行前<br>", url));
            }
    
            public void OnActionExecuted(ActionExecutedContext filterContext)
            {
                string url = string.Format(@"{0}{1}", filterContext.RouteData.Values["controller"], filterContext.RouteData.Values["action"]);
                filterContext.HttpContext.Response.Write(string.Format("{0} 执行后<br>", url));
            }
        }
    }

    然后就可以在 Controller 的中使用了,可以标记为类特性,也可以标记为方法的特性。我在这里标记为类的特性,就可以在这个类的所以方法执行前和执行后进行处理了
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using aspmvc_demo.Attributes;
    
    namespace aspmvc_demo.Controllers
    {
        [HandleError]
        [CommonMethodHold]
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                ViewData["Message"] = "欢迎使用 ASP.NET MVC!";
                this.Response.Write("Index 执行...<br>");
                return View();
            }
    
            public ActionResult About()
            {
                this.Response.Write("About 执行...<br>");
                return View();
            }
        }
    }
    

    运行效果1:homeindex

    运行效果2:homeabout

      

  • 相关阅读:
    Lua中..和#运算符的用法
    C语言之linux内核实现平方根计算算法
    Xcode中git的用法介绍与&quot;Please tell me who you are&quot;问题的解决方式
    公钥加密算法究竟什么鬼
    Mesos, Marathon, Docker 平台部署记录
    查找olr备份路径
    OpenCV矩阵运算
    改动Centosserver主机名称
    HDU 1114
    C++虚函数表剖析
  • 原文地址:https://www.cnblogs.com/pophis/p/4349622.html
Copyright © 2011-2022 走看看