MVC 框架 - 操作過濾器



在 ASP.NET MVC 中,控制器定義操作方法,並且這些操作方法通常與 UI 控制元件(例如單擊按鈕或連結等)具有一對一的關係。例如,在我們之前的示例之一中,UserController 類包含 UserAdd、UserDelete 等方法。

但是,很多時候我們希望在特定操作之前或之後執行某些操作。為了實現此功能,ASP.NET MVC 提供了一個功能,可以在控制器的操作方法上新增操作前和操作後行為。

過濾器型別

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(); 
   } 
} 

使用上述程式碼,如果在操作執行期間發生任何錯誤,它將找到 Views 資料夾中名為 Error 的檢視並將其呈現給使用者。

授權

示例 - 僅允許授權使用者登入應用程式。

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(); 
   } 
}

使用上述程式碼,如果您嘗試在未登入的情況下訪問應用程式,它將丟擲一個類似於以下螢幕截圖中顯示的錯誤。

MVC Authorize Filter
廣告

© . All rights reserved.