• asp.net mvc 三种过滤器


    前几天面试遇到这个问题,发现不是很了解,学习了下,这里记录下来

    经常需要将用户的操作记录到日志中,或者是验证用户是否登录了网站,

    面对这样的需求,以前的操作是自定义一个统一的全局方法,然后做处理,

    在每个需要的页面中添加想要的函数调用,这导致了多个页面中存在了大

    量重复的代码,这样的方式不太符合软件工程的思想。为了解决这个问题,

    mvc为我们提供了过滤器来完成对应的功能,通过过滤器,我们只需要将

    相应的业务处理代码写一次,再在相应的功能处通过特性的方式来使用写

    好的过滤器。

    一句话,我们可以用过滤器来分离与业务逻辑无关却经常需要执行的代码,

    既保证业务逻辑的正确性,也保证了代码的简洁直观

    先看一段示例:

    public class Log : FilterAttribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext filterContext)
            {
                Console.WriteLine("log-after");
                //throw new NotImplementedException();
            }
    
            public void OnActionExecuting(ActionExecutingContext filterContext)
            {
                Console.WriteLine("log-before");
                //throw new NotImplementedException();
            }
        }
    
        public class Exc : FilterAttribute, IExceptionFilter
        {
            public void OnException(ExceptionContext filterContext)
            {
                Console.WriteLine("err");
                filterContext.ExceptionHandled = true;
                //throw new NotImplementedException();
            }
        }
    
        
        public class HomeController : Controller
        {
            // GET: Home
            [Log]
            [Exc]
            public ActionResult Index()
            {
                throw new Exception("error");
                //return View();
            }
        }

    这里我们自定义了一个用来处理异常的类和一个日志记录的类,

    然后通过特性的方式将其添加到控制器中需要的地方,这样的代码就变得十分简洁了

    那我们可以使用哪些过滤器呢,这里一共有四种过滤器,解释如下

    1. ActionFilter(方法过滤器):接口名为[IActionFilter],在控制器方法调用前/后执行
    2. ResultFilter(结果过滤器):接口名为[IResultFilter],在控制器方法调用完,跳转至view页面前/后执行
    3. AuthorizationFilter(授权过滤器):接口名为[IauthorizationFilter],所有过滤器中最先执行的
    4. ExceptionFilter(异常处理过滤器):接口名为[IExceptionFilter],在控制器方法抛出异常时执行

    根据这里的执行顺序,我们可以在不同的需求下自行实现对应的控制器,

    需要注意的是,除了我们需要实现对应的过滤器接口外,同时还需要保证对应的过滤器是特性类,

    这里我们可以通过继承FilterAttribute类来实现。

    接口内部方法解释

    IExceptionFilter:OnException,发生异常时调用

    IResultFilter:OnResultExecuted,控制器方法执行完调用VIEW页面后执行

           OnResultExecutint,控制器方法执行完调用VIEW页面前执行

    IAuthorizationFilter:OnAuthorization,最先调用

    IActionFilter:OnActionExecuted,控制器方法执行后执行

           OnActionExecutint,控制器方法执行前执行

    记录下来,留待后查

    2017 11.30 21:29

  • 相关阅读:
    Apache 阿帕奇 配置运行环境
    2019年6月多校联训b层——搜索算法 Problem A 宽搜 营救
    西安集训B Day1 test 问题 C: 小明的城堡
    西安集训B层Day1 test 问题 A: 旅行日记
    二分答案—洛谷P1182 数列分段`Section II`
    2019.5.25 Noip模拟测试2 T2题解
    2019.5.25 Noip模拟测试2 T1题解
    DP专题练习 toasting
    2019.5.1 DP专题训练 山峰数(hill)
    React 点击按钮显示div与隐藏div
  • 原文地址:https://www.cnblogs.com/ives/p/filter.html
Copyright © 2020-2023  润新知