ASP.NET MVC動作過濾器

jiangzhengdong發表於2013-01-20

ASP.NET MVC提供了4種不同的動作過濾器(Aciton Filter)。

1.Authorization Filter

在執行任何Filter或Action之前被執行,用於身份驗證

2.Action Filter

在執行Action之前或之後被執行,用於執行的Action需要生成記錄或者快取資料時

3.Result Filter

在執行ActionResult的前後被執行。在View被顯示到瀏覽器之前可以執行一些邏輯運算,或修改ViewResult的輸出結果

4.Exception Filter

在Action執行之前或之後或者ActionResult執行之前或之後被執行。在執行中發生異常時,可以使用此Filter指向其他頁面來顯示錯誤資訊


下面是不同動作過濾器的執行順序:

OnAuthorization

              ↓

OnActionExecuting

               ↓

執行動作(Action)

               ↓

OnActionExecuted

               ↓

OnResultExecuting

               ↓

執行檢視(View)

               ↓

OnResultExecuted

              ↓

OnException


動作過濾器一律使用屬性(Attribute)的方式應用在Action之上。eg:

[Authorize(Roles="admin")]
public ActionResult Edit(int id)
{
        return View();
}

這四種動作過濾器都是.net屬性(Attribute)類,只要繼承Attribute類並實現與之對應的介面就可以擴充套件功能。

注:動作過濾器屬性也可以用在Controller上,若用在Controller上,則將此屬性用在此Controller中的所有Action之上。


Authorization過濾器屬性

  • Authorize屬性
使用者或角色符合要求才能被使用。否則就會跳轉到登入頁面
其中在web.config檔案的system.web類的設定中有一個Authentication設定,其中<forms>部分有一個loginUrl屬性可以設定當許可權不足時應該跳轉的地址,eg:
        
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>

  • ChildActionOnly屬性

  • RequiredHttps屬性
        應用RequiredHttps屬性,讓Action僅能顯示在https安全登入的狀態下。如果使用者使用http連線,該Action就會自動轉向同一個Action的https網址。
        
[RequireHttps]
public ViewResult Index()
{
        ......
        return View();
}
  • ValidateInput屬性


相關文章