.NET MVC5过滤器

  1. MVC过滤器的定义
  2. 怎么使用MVC过滤器
  3. MVC过滤器的优缺点

MVC过滤器定义

   APS.NET MVC中(以下简称“MVC”)的每一个请求,
   都会分配给相应的控制器和对应的行为方法去处理,
   而在这些处理的前前后后如果想再加一些额外的逻辑处理。这时候就用到了过滤器。

MVC支持的过滤器类型有四种,分别是:Authorization(授权),Action(行为),Result(结 果)和Exception(异常)。如下表,

过滤器的类型 接口 描述
Authorization IAuthorizationFilter 此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法
Exception IExceptionFilter 用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常
Action IActionFilter 用于进入行为之前或之后的处理
Result IResultFilter 用于返回结果的之前或之后的处理

但是默认实现它们的过滤器只有三种,分别是Authorize(授权),ActionFilter,HandleError(错误处理);各种信息如下表所示

过滤器 类名 实现接口 描述
ActionFilter AuthorizeAttribute IAuthorizationFilter 此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法
HandleError HandleErrorAttribute IExceptionFilter 用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常
自定义 ActionFilterAttribute IActionFilter和IResultFilter 用于进入行为之前或之后的处理或返回结果的之前或之后的处理

怎么使用MVC过滤器

模拟菜单权限控制

   public class AuthCheckFilter: ActionFilterAttribute
    {
        public bool isCheck { get; set; }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!isCheck)
            {
                return;
            }

            //获取当前请求的控制器和方法
            var controllerName =
                filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
           //获取当前请求的控制器和名称
            var actionName = filterContext.ActionDescriptor.ActionName;
            string path = ("/" + controllerName + "/" + actionName).ToLower();
            //将这个”/控制器/方法“ 与当前登陆人能操作的菜单进行匹配
            var Myurl = filterContext.HttpContext.Session["Myurl"] as List<string>;
            if (!Myurl.Contains(path))
            {
              //如果查找没有,就跳转首页
                filterContext.Result = new RedirectResult("/home/index");
            }
        }
    }

在MVC 中的 APP_start中的FilterConfig.cs

定义一个方法
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// 默认的过滤器
filters.Add(new HandleErrorAttribute());
//当ischeck为 true拦截 添加刚写的过滤器
filters.Add(new AuthCheckFilter() { isCheck = true });
}

MVC 过滤器的优缺点

MVC优点:
1.大型开发的时候容易维护,扩展性很好。
2.能够对HTML有完全的控制权限,对于前端来说很友好。
3.能够进行单元测试,保证功能的实现。
缺点:
1.没有那么多的现成控件使用,开发效率相对较低(特别是对于菜鸟来说)
2.对于大型数据的处理比较难,还是因为没有现成girdview控件。这个控件虽然生成的html结构异常复杂,但是对于处理大量而且复杂的数据来说是很不错的。不过一般网站是很少有这种大量且复杂的数据,很多菜鸟都是用这个大炮来打蚊子,浪费且低效率。对于网站开发来说这个控件应该不推荐使用。

猜你喜欢

转载自blog.csdn.net/weixin_45191758/article/details/106452051