MVC 过滤器


MVC 过滤器常用有4种

  1. Action过滤器(IActionFilter) =》 行为过滤器
  2. Result过滤器 (IResultFilter)=》 视图过滤器 或 结果过滤器
  3. Exception过滤器(IExceptionFilter)=》 异常过滤器
  4. Authorization过滤器(IAuthorizationFilter) =》权限校验过滤器

Action过滤器:在Action执行之前和执行之后触发

Result过滤器:在结果之前和结果之后触发

Exception过滤器: 在发生异常时调用

Authorization过滤器:身份验证时触发

》》过滤器的作用

一般用于记录日志、异常处理、身份验证、行为记录等

》》》 定义一个Attribute

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WEBMVC.Models
{
    public class MyActionFilterAttribute:ActionFilterAttribute
    {
        public string  ExecName{ get; set; }
        /// <summary>
        /// Action 执行之前
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            HttpContext.Current.Response.Write("<br/>OnActionExecuting :" + ExecName + " 执行了");
        }
        /// <summary>
        /// Action 执行之后
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            HttpContext.Current.Response.Write("<br/>OnActionExecuted: "+ExecName+" 执行了");
        }
        /// <summary>
        /// ActionResult执行 之前
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
            HttpContext.Current.Response.Write("<br/> OnResultExecuting "+ ExecName+" 执行了");
        }
        /// <summary>
        /// ActionResult执行 之后
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            HttpContext.Current.Response.Write("<br/> OnResultExecuted "+ExecName+" 执行了");
        }
    }
}

》》 过滤器可以作用到控制器、Action。

过滤器有优先级,越靠近Action优先级越高。

如果控制器和方法都标记了过滤器,会选择方法上的过滤器,也可以设置打开所有过滤器设置,将两个过滤器都触发,这个设置默认是关闭的。

全局过滤器

1》》在App_Start 文件夹中创建 FilterConfig.cs 类 内容如下:

csharp 复制代码
using System.Web.Mvc;
using WEBMVC.Models;  //MyActionFilterAttribute 的命名空间
 public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            // 添加自定义的全局过滤器
            filters.Add(new MyActionFilterAttribute() { ExecName="Global"});
        }
    }

如果要实现触发多个过滤器,需要开启如下:

在过滤器追加特性

[AttributeUsage(AttributeTargets.All,AllowMultiple =true)]

在重写的过滤器方法中可以获取必要的信息 进制判断

》》》异常过滤器

相关推荐
luckilyil9 小时前
Spring MVC 与 JSP 数据传输
java·spring·mvc
m0_7430484417 小时前
Spring MVC练习
java·spring·mvc
V+zmm101341 天前
小说实体书商城微信小程序ssm+论文源码调试讲解
java·小程序·毕业设计·mvc·ssm·课程设计
V+zmm101341 天前
校园服务平台小程序ssm+论文源码调试讲解
java·小程序·毕业设计·mvc·课程设计·1024程序员节
海无极2 天前
EDUCODER头哥 基于MVC模式的用户登录
mvc
组合缺一2 天前
Solon MVC 的 @Mapping 用法说明
java·mvc·solon
小春学渗透2 天前
DAY111PHP开发框架&THIKNPHP&反序列化&POP利用链&RCE执行&文件删除
java·开发语言·安全·php·mvc·代码审计
鹿屿二向箔3 天前
基于SSM(Spring + Spring MVC + MyBatis)框架的快递管理系统
spring·mvc·mybatis
阑梦清川3 天前
JavaEE进阶---SpringMVC(二)请求里面十种参数类型
java·java-ee·mvc·请求类型
像污秽一样3 天前
基于Servlet实现MVC
servlet·mvc