• ASP.NET Core五种Filter


    Authorization Filter
    Authorization是五种Filter中优先级最高的,通常用于验证Request合不合法,不合法后面就直接跳过。
    权限控制器过滤器,可以通过Authonization可以实现复杂的权限角色认证、登录授权等操作实现事例如下:
       public class AuthonizationFilter :Attribute,IAuthorizationFilter
        {
            public void OnAuthorization(AuthorizationFilterContext context)
            {
                //这里可以做复杂的权限控制操作
                if (context.HttpContext.User.Identity.Name != "1") //简单的做一个示范
                {
                    //未通过验证则跳转到无权限提示页
                    RedirectToActionResult content = new RedirectToActionResult("NoAuth", "Exception", null);
                    context.Result = content;
                }
            }
        }
    Resource Filter
    Resource是第二优先,会在Authorization之后,Model Binding之前执行。通常会是需要对Model加工处理才用。
       public class AuthonizationFilter :Attribute,IAuthorizationFilter
        {
            public void OnAuthorization(AuthorizationFilterContext context)
            {
                //这里可以做复杂的权限控制操作
                if (context.HttpContext.User.Identity.Name != "1") //简单的做一个示范
                {
                    //未通过验证则跳转到无权限提示页
                    RedirectToActionResult content = new RedirectToActionResult("NoAuth", "Exception", null);
                    context.Result = content;
                }
            }
        }
    Exception Filter
    异常处理的Filter,可以进行全局的异常日志收集等操作,使用该过滤器需要实现
    IExceptionFilter接口,实现这个接口需要实现OnException方法,当系统发送未捕捉的异常时候就会触发这个方法,这个方法里面包含了一个ExceptionContext异常上下文,其中包含了具体的异常信息,然后就需要使用日志组件等记录下这个异常。
     
    public class ExecptionFilter : Attribute, IExceptionFilter
      {
            private ILogger<ExecptionFilter> _logger;
            //构造注入日志组件
            public ExecptionFilter(ILogger<ExecptionFilter> logger)
            {
                _logger = logger;
            }
    
            public void OnException(ExceptionContext context)
            {
                //日志收集
                _logger.LogError(context.Exception, context?.Exception?.Message??"异常");
            }
        }
    Action Filter
    最常使用的Filter,封包进出都会经过它,使用上没什么需要特别注意的。跟Resource Filter很类似,但并不会经过Model Binding。
    可以通过ActionFilter拦截每个执行方法进行一系列的操作,比如:执行日志、参数验证、权限控制等一系列操作。使用Action Filter 需要实现IActionFilter 抽象接口,IActionFilter 接口要求实现OnActionExecuted 和OnActionExecuting 方法
     public class ActionFilter : Attribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext context)
            {
                //执行完成....
            }
    
            public void OnActionExecuting(ActionExecutingContext context)
            {
                //执行中...
            }
        }
    Result Filter
    当Action完成后,最终会经过的Filter,可以对结果进行格式化、大小写转换等一系列操作。
    
    public class ResultFilter : Attribute, IResultFilter
     {
            public void OnResultExecuted(ResultExecutedContext context)
            { 
                // 在结果执行之后调用的操作...
            }
    
            public void OnResultExecuting(ResultExecutingContext context)
            {
                // 在结果执行之前调用的一系列操作
            }
        }
  • 相关阅读:
    【2021-03-03】人生十三信条
    【2021-03-02】勤奋和努力是积极乐观的自然导向
    【2021-03-01】解铃还需系铃人
    【2021-02-28】人生十三信条
    【2021-02-27】人生十三信条
    【2021-02-26】人生十三信条
    【2021-02-25】“活到老,做到老”的观念趋势
    【一句日历】2021年3月
    【2021-02-24】理想化中的积极进取精神
    机器人走方格
  • 原文地址:https://www.cnblogs.com/ITzhangyunpeng/p/12694026.html
Copyright © 2020-2023  润新知