ASP.NET MVC 過濾器


  前段時間從外包公司回來,回到公司加入到了公司項目中的開發。看到項目中用到了過濾器,以前沒接觸過,到網上查了一下,結合項目與自己的理解記錄一下。

  1、為什么要用到過濾器。2、它能解決什么問題 3、是否會帶來新問題,嚴重不,我們是否能夠解決掉?

  在實際項目中,稍微像樣點的項目總會有一些相關的AOP(面向切面,也叫做面向面)編程的組件,而MVC項目中太關心我們這些農民工啦,不想讓MVC開發人員去為了身份驗證、日志、異常等部分重復代碼。於是我們在MVC項目中就可以直接使用它提供的Fileter特性幫我們解決,不用我們自己去實現復雜的AOP了。 

  以日志為例:

 

  [LogActionFilter(Message="打開企業列表")]
  public ActionResult Index()
  {
    return View();
  }

  

  [LogActionFilter(Message="添加企業")]
  public ActionResult Add(Contact contact)
  {
    return View();
  }


public class LogActionFilter : ActionFilterAttribute {

    public string Message { get; set; }
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
      //記錄操作日志,寫進操作日志中
      var controllerName = filterContext.RouteData.Values["controller"];
      var actionName = filterContext.RouteData.Values["action"];
    }


   }

在合適的地方用到適當的Filter,ASP.NET MVC提供了幾個默認的Filter

 

 

Filter Type

實現接口

執行時間

Default Implementation

Authorization filter

IAuthorizationFilter

在所有FilterAction執行之前執行

AuthorizeAttribute

Action filter

IActionFilter

分別在Action執行之前和之后執行。

ActionFilterAttribute

Result filter

IResultFilter

分別在Action Result執行之后和之前

ResultFilterAttribute

Exception filter

IExceptionFilter

只有在filter,

或者 action method, 或者 action result 拋出一個異常時候執行

 

HandleErrorAttribute

 

 

 

 

 

 

 

 

 

 

 

 

  因為ActionFilterAttribute默認實現了IActionFilter和IResultFilter。而ActionFilterAttribute是一個抽象類型,所以不能直接被實例化使用,所以我們想使用的話必須繼承一下才能夠使用。我們可以重載ActionFilterAttribute類中的以下幾個方法:

  OnActionExecuting – 在Action執行之前調用。 
  OnActionExecuted – 在Action執行之后調用。 
  OnResultExecuting – 在Result產生之前調用。 
  OnResultExecuted – 在Result產生之前調用。 

 

根據需要,我們可以在重載的方法中寫入需要的代碼,如上面代碼中,我只是在OnResultExecuted方法中寫入了一些方法,用來記錄操作日志。如果用過濾器進行驗證的話,可以在OnActionExecuting方法里面進行一些驗證。過濾器是在對請求進行處理時對動作邏輯進行擴展的手段,而不需要把這種邏輯包含在動作方法中。

在ASP.NET MVC中還有哪些場合會用到過濾器呢? 

  1. 判斷登錄與否或用戶權限
  2. 決策輸出緩存
  3. 防盜鏈
  4. 防蜘蛛
  5. 本地化與國際化設置 
  6. 實現動態Action

在園子里記錄一下,方便以后用到后有個簡單的回憶提示。

 

引用:http://www.cnblogs.com/boruipower/archive/2012/11/18/2775924.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM