MVC框架 - 動作過濾器
在ASP.NET MVC中,控制器確定行作方法和動作,這些方法一般是一到一對應於UI控件,例如單擊按鈕或鏈接等,例如,在前面的例子,UserController類包含方法:UserAdd,UserDelete等。
但很多時候,我們希望在特定操作之前或之後執行一些動作。爲了實現這個功能,ASP.NET MVC提供一個在控制器的action方法添加前置和後置的動作行爲的功能。
過濾器的類型
ASP.NET MVC框架支持下列動作過濾器:
- 動作過濾器:動作過濾器用來實現獲取前一個控制器動作執行後執行的邏輯。在本章我們將着眼於動作過濾器細節。
- 授權過濾器:授權過濾器用於實現對控制器動作的驗證和授權。
- 結果過濾器:結果過濾器包含之前和視圖結果被執行後,執行邏輯。例如,可能要修改視圖結果前右視圖呈現給瀏覽器。
- 異常過濾器:異常過濾器是最後運行的一個類型。可以使用一個異常過濾器來處理由任何控制器的動作或控制器操作的結果出現的錯誤。 也可以使用異常過濾器來記錄錯誤。
動作過濾器是最常用的過濾器,一個來執行額外的數據處理,或操縱的返回值或取消操作,執行或在運行時修改視圖的結構。
操作過濾器
動作過濾器附加屬性是可以應用到控制器部分或整個控制器修改,以執行動作。這些屬性是特殊的,從System.Attribute派生,.NET類可以附加到類,方法,屬性和字段。
ASP.NET MVC提供了以下行動過濾器:
- 輸出緩存: 這個動作過濾器緩存控制器的動作在指定的時間量的輸出。
- 處理錯誤:這個動作過濾器處理的控制器操作執行時出現的錯誤。
- 授權:這個行爲過濾器,可以限制訪問特定用戶或角色。
現在,我們將看到的代碼示例,這個例子控制器ActionFilterDemoController應用這些過濾器。(ActionFilterDemoController只是作爲一個例子,可以在任何控制器使用這些過濾器。)
輸出緩存
例如:指定的返回值被緩存10秒。
public class ActionFilterDemoController : Controller
{
[HttpGet]
OutputCache(Duration = 10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}
處理錯誤
例如:應用重定向到一個自定義錯誤頁時,被控制器觸發錯誤
[HandleError]
public class ActionFilterDemoController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}
public ActionResult About()
{
return View();
}
}
使用上面的代碼,如果操作執行過程中的任何錯誤發生,它會找到一個在瀏覽文件夾命名爲錯誤視圖並渲染頁面給用戶。
授權
例如:只允許授權用戶登錄應用
public class ActionFilterDemoController: Controller
{
[Authorize]
public ActionResult Index()
{
ViewBag.Message = "This can be viewed only by authenticated users only";
return View();
}
\[Authorize(Roles="admin")\]
public ActionResult AdminIndex()
{
ViewBag.Message = "This can be viewed only by users in Admin role only";
return View();
}
}
使用上面的代碼,如果想嘗試不登錄就訪問應用程序,它會拋出類似這樣的錯誤: