【MVC】过滤器应用-代码

写在前面的

   经过这一版积分系统的重构,也对MVC中过滤器有了一些实际应用的经验,下面我就来结合我们的小项目中的一些具体事例,对MVC过滤器进行一下小小的研究。

什么是过滤器?

  • 简单的来讲,就是MVC为了帮我们简化身份验证、异常和页面跳转的一套解决方案。拥有了过滤器的Action或者全局过滤器的项目会在上述的这些操作的效率会大大的提升。

过滤器的分类

  • 全局过滤器 :顾名思义,对全局的controller中的action都加上符合该过滤器过滤规则,从而达到一些公共访问权限的配置。

  • 局部过滤器 :
    和全局相反,主要是加在某些需要特定过滤规则的controller的action上,只有当该action被激活以后或者将要激活之前,再来执行过滤器中的过滤规则。

实例

创建自定义的过滤器

当ACTION执行之后进行验证

  • 简单的身份验证,从而进行页面跳转过滤器:
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]  //让controller上的标签也起到作用

///需要继承ActionFilterAttribute,这样就可以实现过滤器相关的处理
public class FilterCharacter : ActionFilterAttribute
    {
        //OnActionExecuted表示该过滤器需要在ACTION执行之后进行规则过滤
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
        base.OnActionExecuted(filterContext);
            //GetSession session = new GetSession();
            //获取触发当前方法(OnActionExecuting)的Action名字(即:哪个Action方法被执行的时候触发的OnActionExecuting(ActionExecutingContext filterContext)) 
            string actionName = filterContext.ActionDescriptor.ActionName;
            //获取触发当前方法的的Action所在的控制器名字  
            string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;  
            // 对session进行非空判断
            if (System.Web.HttpContext.Current.Session["username"] != null)
            { //进行页面跳转
            System.Web.HttpContext.Current.Response.Write("<script type=javascript>window.onload=function(){window.top.location.href='/FrontPage/Index'}</script>");
                }else
                {
                    System.Web.HttpContext.Current.Response.Write("<script language=javascript>window.onload=function(){window.top.location.href='HomeBack/HomeIndex'}</script>");
                }else
            {
System.Web.HttpContext.Current.Response.Write("<script language=javascript>window.top.location.href='/Login/index'</script>");
            }
            }
    }
}

当ACTION执行之前进行规则过滤

  • 和上一个过滤器大体相同,只需要将OnActionExecuted改成OnActionExecuting即可。
public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);//在调用方法之前进行的操作
            .........
        }

总结

  • 总之,在MVC之后的几个版本里,都对过滤器的注册,执行过程作出了非常好的优化,省去了原来繁琐的JS前台代码的编写才能达到的用户验证、日志IO以及一些异常的处理等功能,所以,熟练掌握过滤器的一些使用规范和技巧,可以让项目开发事半功倍!
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值