• MVC过滤器


    一、在Model层添加一个类MyActionFilterAttribute.cs

    //AllowMultiple = true:允许多个标签同时都起作用
    [AttributeUsage(AttributeTargets.All,AllowMultiple = true)]
    public class MyActionFilterAttribute : ActionFilterAttribute
    {
        public string Name { get; set; }
    
        //Action执行之前先执行此方法
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            //HttpContext.Current.Session[""]
            HttpContext.Current.Response.Write("<br />OnActionExecuting Action执行之前先执行此方法 :" + Name);
        }
    
        //Action执行之后
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            HttpContext.Current.Response.Write("<br />OnActionExecuted Action执行之后:" + Name);
        }
    
        //ActionResult执行之前先执行此方法
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
            HttpContext.Current.Response.Write("<br />OnResultExecuting ActionResult执行之前先执行此方法:" + Name);
        }
    
        //ActionResult执行之后
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            HttpContext.Current.Response.Write("<br />OnResultExecuted ActionResult执行之后:" + Name);
        }
    }

    二、控制器调用:

    [MyActionFilter(Name = "HomeController")]
    public class HomeController : Controller
    {
        [MyActionFilter(Name = "Index Action")]
        public ActionResult Index()
        {
            Response.Write("<p>Action执行了</p>");
    
            return Content("<br />ok:视图被渲染<br />");
        }
    }

    三、异常时执行的方法,在Model添加一个类MyExceptionFilterAttribute.cs

    public class MyExceptionFilterAttribute: HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
    
            //当出现了异常的时候,才执行此方法
    
            //记录日志
            //多个线程同时访问一个日志文件
            //性能非得低。
            //考虑使用内存队列提高性能,Redis
            //加入观察者模式屏蔽写入不同地方的变化点
            //log4net
    
            //页面跳转到错误页面或者是首页
            HttpContext.Current.Response.Redirect("/Home/Index");
        }
    }
  • 相关阅读:
    QSet<T>自定义类型需要定义==和qHash()函数
    《左耳听风》-ARTS-打卡记录-第十三周
    Windows中对窗口进行剪切
    Markdown 编写规范
    【洛谷 P1033】自由落体
    【GOJ 3032】司愁之路
    动态规划基础 3-解题报告
    前缀、中缀、后缀互相转换
    【GOJ 3015】疯狂外星人
    【GOJ 3010】有趣的数
  • 原文地址:https://www.cnblogs.com/genesis/p/4882518.html
Copyright © 2020-2023  润新知