MVC 中的動作過濾器 [過濾器類型與示例]

已發表: 2021-03-04

目錄

ASP.NET MVC – 動作過濾器

在 MVC(模型-視圖-控制器)過濾器中,我們根據 MVC 框架請求處理的不同功能或邏輯使用附加邏輯。

MVC 過濾器實現了不同級別的流程:例如,授權、日誌記錄和緩存。

我們可以將 Action 過濾器視為可以實現到控制器操作方法的屬性,以根據業務邏輯進行修改。

我們可以考慮系統中的 MVC 過濾器。 屬性定義為類、方法、屬性和字段。

另請閱讀: MVC 項目

ASP.NET MVC 框架包含各種動作過濾器

授權:此操作過濾器能夠限制對特定用戶角色的訪問。

OutputCache :它是動作過濾器,在定義的時間內緩存控制器動作方法的結果。

HandleError :當這個控制器動作執行時,如果代碼失敗,它會處理特定場景中的錯誤。 它允許您創建自定義操作過濾器。

例如,我們可以創建自定義操作過濾器來執行自定義身份驗證系統。

資源

請求和響應生命週期流程中的過濾管道:

資源

過濾器提供了兩種在代碼中實現邏輯的類別,它執行不同的接口定義-

  1. 同步
  2. 異步

同步過濾器

在 Synchronization 過濾器中,我們可以在管道處理時運行管道前後的代碼; 我們可以將其視為OnStageExecutingOnStageExecuted操作方法。

異步過濾器

異步過濾器使用單一方法描述,該方法具有以下方法

  • OnAction執行
  • OnActionExecuted
  • OnActionExecutionAsync

下面的代碼片段是聲明的類型

公共類 TimestampFilter : IActionFilter, IAsyncActionFilter

{

公共無效OnActionExecuting (ActionExecutingContext 上下文)

{

context.ActionDescriptor.RouteValues[“timestamp”] = DateTime.Now.ToString();

}

公共無效OnActionExecuted (ActionExecutedContext 上下文)

{

var ts = DateTime.Parse(context.ActionDescriptor.RouteValues[“timestamp”]).AddHours(1).ToString();

context.HttpContext.Response.Headers[“X-EXPIRY-TIMESTAMP”] = ts;

}

公共異步任務OnActionExecutionAsync (ActionExecutingContext 上下文,ActionExecutionDelegate 下一個)

{

this.OnActionExecuting(context);

var resultContext = 等待下一個();

this.OnActionExecuted(resultContext);

}

}

MVC 中的動作過濾器類型

ASP.NET MVC 框架維護各種過濾器:

授權過濾器:執行 IAuthorisationFilter 屬性。

動作過濾器:執行 IActionFilter 屬性。

結果過濾器:執行 IResultFilter 屬性。

異常過濾器:執行 IExceptionFilter 屬性。

授權過濾器

我們可以將它用於用戶的可訪問性,我們可以在控制器中執行action方法之前聲明它。

授權過濾器啟用兩個內置屬性,例如:Authorize 和 AllowAnonymous

我們可以根據我們的業務需求在代碼中的自定義邏輯中使用這些。

下面的代碼片段是授權過濾器的示例

[授權]

公共 ActionResult SecureMethod()

{

返回視圖();

}

[允許匿名]

公共 ActionResult NonSecureMethod()

{

返回視圖();

}

公共 ActionResult SecureMethod()

{

返回視圖();

}

動作過濾器

我們可以在執行操作方法之前和操作方法之後描述操作過濾器。

它包含兩種類型的方法。

  1. OnActionExecuted
  2. OnAction執行

下面的代碼片段是動作過濾器的示例

使用系統;

使用 System.Collections.Generic;

使用 System.Linq;

使用 System.Web;

使用 System.Web.Mvc;

命名空間 TutorialActionFilter.Filters

{

公共類 Myactionfilter : FilterAttribute,IActionFilter

{

公共無效OnActionExecuted (ActionExecutedContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Index”);

}

別的

{

filterContext.Result = newRedirectResult(“/Login /Login”);

}

}

公共無效OnActionExecuting (ActionExecutingContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Index”);

}

別的

{

filterContext.Result = newRedirectResult(“/Login /Login”);

}

}

}

}

[教程動作過濾器]

[AcceptVerbs(HttpVerbs.Get)]

公共 ActionResult GetPerson()

{

人 p = 新人 ();

返回視圖(“人”,p);

}

結果過濾器

我們可以在執行動作方法之前和執行動作方法之後描述動作過濾器。

它包含兩種類型的方法。

  1. OnResultExecuted
  2. OnResultExecuting

下面的代碼片段是 Result Filters 的示例

使用系統;

使用 System.Collections.Generic;

使用 System.Linq;

使用 System.Web;

使用 System.Web.Mvc;

命名空間 ResultFilter.Filters

{

公共類 MyResultfilter : FilterAttribute,IResultFilter

{

公共無效 OnResultExecuted(ResultExecutedContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Contact”);

}

別的

{

filterContext.Result = newRedirectResult(“/Login/Login”);

}

}

公共無效OnResultExecuting (ResultExecutingContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Contact”);

}

別的

{

filterContext.Result = newRedirectResult(“/Login/Login”);

}

}

}

}

[我的結果過濾器]

[AcceptVerbs(HttpVerbs.Get)]

公共 ActionResult GetPerson()

{

人 p = newPerson ();

返回視圖(“人”,p);

}

異常過濾器

當控制器或操作方法拋出異常時,我們可以使用它們。

這個異常過濾器對於捕獲異常很重要。

下面是使用異常過濾器的代碼片段

使用系統;

使用 System.Collections.Generic;

使用 System.Linq;

使用 System.Web;

使用 System.Web.Mvc;

命名空間 ExceptionFilter.Filters

{

公共類 MyExceptionFilter : FilterAttribute, IExceptionFilter

{

公共無效OnException (ExceptionContext filterContext)

{

filterContext.Controller.ViewBag.onExceptionError = “調用了ExceptionFilter過濾器”;

filterContext.HttpContext.Response.Write(“調用了ExceptionFilter過濾器”);

}

}

}

[我的異常過濾器]

公共類 HomeController : 控制器

{

[AcceptVerbs(HttpVerbs.Get)]

公共 ActionResult GetPerson()

{

人 p = newPerson ();

返回視圖(“人”,p);

}

}

另請閱讀: Java MVC 項目

從世界頂級大學在線學習軟件課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

我們希望本文能幫助您了解 MVC 中的操作過濾器。

如果您有興趣了解有關全棧開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為在職專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目,以及任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

什麼是編程中的數據結構?

數據結構是我們在程序中排列數據的方式。 兩個最重要的數據結構是數組和鍊錶。 數組是最熟悉的數據結構,也是最容易理解的。 數組基本上是相關項目的編號列表。 它們易於理解和使用,但在處理大量數據時效率不高。 鍊錶更複雜,但如果使用得當,它們會非常有效。 當您必須在大列表中間添加或刪除項目時,或者當您需要在大列表中搜索項目時,它們是不錯的選擇。

鍊錶和數組有什麼區別?

在數組中,索引用於訪問元素。 數組中的元素按順序組織,如果使用索引,則可以輕鬆訪問和修改元素。 數組也有固定的大小。 元素是在創建時分配的。 在鍊錶中,指針用於訪問元素。 鍊錶的元素不一定按順序存儲。 鍊錶的大小未知,因為它可以在創建時包含節點。 指針用於訪問元素,因此內存分配更容易。

C語言中的指針是什麼?

指針是 C 中的一種數據類型,它存儲任何變量或函數的地址。 它通常用作對另一個內存位置的引用。 指針可以保存數組、結構、函數或任何其他類型的內存地址。 C 使用指針向函數傳遞值和從函數接收值。 指針用於動態分配內存空間。