码迷,mamicode.com
首页 > 其他好文 > 详细

01---4中过滤器的总结与使用

时间:2016-07-11 10:37:44      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

1.过滤器的使用(创建一个MyFilter文件夹存储所有的过滤器)
    1.1    Authorization
        1.1.1创建一个MyAuthorization继承自AuthorizatioAttribute
            
        1.1.2重写OnAuthorization方法,传入一个filterContext
        
        1.1.3    客户端重定向的时候不要使用filterContext.HttpContet.Response.Ridirect(string url),而是使用filterContext.Result,因为第一种不会让服务器段停止执行.
            filterContext.Result=new RedirectResult(UrlHelper.GenerateUrl());

        1.1.4    给要添加过滤的行为或者控制器中添加定义的过滤器:格式是[MyAuthorization],则有添加特性的过滤器获取方法就会先去执行过滤器中的内容,再执行行为.
                namespace t1_Filter.Controllers
                {
                    //当前控制器下的所有行为均进行定义的身份验证过滤器
                    [MyAuthorization]
                    public class HomeController : Controller
                    {
                        //
                        // GET: /Home/
                        //添加一个身份验证的过滤器
                        //[MyAuthorization]
                        public ActionResult Index()
                        {
                            return View();
                        }

                        public ActionResult Show()
                        {
                            return View();
                        }
                    }
                }
            1.1.5    当需要给所有控制器所有行为添加身份验证过滤器的时候.在global文件中注册
                
                     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
                            {
                                // 原来的身份验证过滤器
                                //filters.Add(new HandleErrorAttribute());

                                //在全局中注册过滤器,则所有控制器的所有行为,都会执行这个过滤器
                                filters.Add(new MyAuthorization());

                            }

            1.1.6    第二种,使用在控制器中重写onAuthorization的方法来实现

                        protected override void OnAuthorization(AuthorizationContext filterContext)
                        {
                           filterContext.HttpContext.Response.Write("这是在控制器中重写的身份验证过滤器");
                        }

        1.2    异常处理过滤器
            使用的方法如身份验证过滤器,不过一般注册到Global文件的过滤器中
                public override void OnException(ExceptionContext filterContext)
                    {
                        //以下代码不可以被删除,否则捕获不到异常
                        base.OnException(filterContext);   
                         //记录日志   

                        //页面跳转
                        filterContext.Result=new RedirectResult("/Error/404.html");
                    }
                
                注意:要更改配置文件:在system.web节点中添加一个customErrors节点
                    <system.web>
                        <customErrors mode="On"></customErrors>
                    <system.web>

        
        1.3    行为过滤器:继承自ActionFilterAttribute
            1.3.1    OnActionExcuting(行为前)

            1.3.2    OnActionExcuted(行为后)
        1.4    结果过滤器:继承自ActionFilterAttribute
            1.4.1    OnResultExcuting(结果执行前)

            1.4.2    OnResultExcuted(结果执行后)
        Demo:
             public class MyAction:ActionFilterAttribute
                {
                    public override void OnActionExecuting(ActionExecutingContext filterContext)
                    {
                        filterContext.HttpContext.Response.Write("自定义行为执行前方法<br/>");
                    }

                    public override void OnActionExecuted(ActionExecutedContext filterContext)
                    {
                        filterContext.HttpContext.Response.Write("自定义行为执行后方法<br/>");
                    }
                    
                    public override void OnResultExecuting(ResultExecutingContext filterContext)
                    {
                        filterContext.HttpContext.Response.Write("结果执行前的方法<br/>");
                    }

                    public override void OnResultExecuted(ResultExecutedContext filterContext)
                    {
                        filterContext.HttpContext.Response.Write("结果执行后的方法<br/>");
                    }
                }            


    
总结:
=>过滤器的的实现由两种方式:
    1.自定义类,然后给要执行的控制器或者方法添加特性

    2.重写Controller类的方法

=>过滤器的种类4种:
    1.身份验证过滤器
    2.异常处理过滤器
    3.行为过滤器
    4.结果过滤器
        
        
        

 

01---4中过滤器的总结与使用

标签:

原文地址:http://www.cnblogs.com/clcloveHuahua/p/5659336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!