ASP.NET MVC2.0 自訂filters__.net

來源:互聯網
上載者:User
   

    今天大家共同學習下ASP.NET MVC2.0中自訂filters,這一節主要學習下ActionFilterAttribute,

    ActionFilterAttribute繼承IActionFilter, IResultFilter介面,並且繼承FilterAttribute類.

     ActionFilterAttribute可以監控action執行過程中所有階段,包括日誌,異常處理等功能.

       主要包括以下四個重載方法

       OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted

 

 1.OnActionExecuting是在action開始前執行

  用於身分識別驗證和伺服器端緩衝輸出

2. OnActionExecuted在action結束後執行

主要用於異常處理

3. OnResultExecuting在返回result前執行

    主要用於設定用戶端緩衝和伺服器端壓縮

4. OnResultExecuted在返回result後執行

   主要用於異常處理和頁面尾部輸出調試資訊

以下兩個DEMO,將展示actionfilter的具體用法

   demo1:

        在這個DEMO中我們將展示action在各個階段的執行時間,並在頁面中輸出。

        首先我們定義一個ActionLogAttribute類

     

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace MvcAppOne.ActionFilters{    public class ActionLogAttribute : ActionFilterAttribute    {        /// <summary>        /// 表示actionID        /// </summary>        public int ID        {            get;            set;        }        /// <summary>        /// 在 action開始前執行        /// </summary>        /// <param name="filterContext"></param>        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon開始執行" + DateTime.Now.ToString() + "<br/>");            base.OnActionExecuting(filterContext);        }        /// <summary>        /// 在action結束後執行        /// </summary>        /// <param name="filterContext"></param>        public override void OnActionExecuted(ActionExecutedContext filterContext)        {            filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon執行結束" + DateTime.Now.ToString() + "<br/>");            base.OnActionExecuted(filterContext);        }        /// <summary>        /// 在result開始前執行        /// </summary>        /// <param name="filterContext"></param>        public override void OnResultExecuting(ResultExecutingContext filterContext)        {            filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result執行開始" + DateTime.Now.ToString() + "<br/>");            base.OnResultExecuting(filterContext);        }        /// <summary>        /// 在result結束後執行        /// </summary>        /// <param name="filterContext"></param>        public override void OnResultExecuted(ResultExecutedContext filterContext)        {            filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result執行結束" + DateTime.Now.ToString() + "<br/>");            base.OnResultExecuted(filterContext);        }    }}


   然後我們建立一個VIEW頁面,ShowNews頁面

   然後再建立一個ACTION,並把屬性標記在action上面

 [ActionFilters.ActionLog(ID=3)]        public ActionResult ShowNews()        {            return View();        }


  此時我們運行ShowNews頁面,我們將看到如下效果

 

 

 

 demo2: 接著我們看第二個DEMO,在這個demo中,我們將展現actionFILTER中各個方法的作用

               我們建一個類 ActionDealAttribute

 

public class ActionDealAttribute : ActionFilterAttribute    {        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            //使用者沒有驗證通過,轉向登入頁面            if (!filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)            {                filterContext.Result = new RedirectResult("../account/logon");            }        }        public override void OnActionExecuted(ActionExecutedContext filterContext)        {            //異常處理            if (filterContext.Exception!=null)            {                filterContext.ExceptionHandled=true;                filterContext.Result = new RedirectResult("../shared/Error");//轉向錯誤頁面            }        }        public override void OnResultExecuting(ResultExecutingContext filterContext)        {            base.OnResultExecuting(filterContext);        }        public override void OnResultExecuted(ResultExecutedContext filterContext)        {            base.OnResultExecuted(filterContext);        }    }


  再建立一個news頁面,並建立一個對應的action

  如果訪問news頁面需要登入才能訪問,就在news對應的action標記此屬性,在OnActionExecuting中進行處理

[ActionFilters.ActionDeal]        public ActionResult News()        {            return View();        }


如果news頁面訪問的時候出現異常,就會轉向錯誤頁面,在OnActionExecuted中進行處理

        [ActionFilters.ActionDeal]        public void News()        {            throw new Exception();        }


 以上只是自訂action的簡單用法,供大家參考。

 代碼下載:http://download.csdn.net/detail/zx13525079024/4375094

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.