MVC 中的動作過濾器 [過濾器類型與示例]
已發表: 2021-03-04目錄
ASP.NET MVC – 動作過濾器
在 MVC(模型-視圖-控制器)過濾器中,我們根據 MVC 框架請求處理的不同功能或邏輯使用附加邏輯。
MVC 過濾器實現了不同級別的流程:例如,授權、日誌記錄和緩存。
我們可以將 Action 過濾器視為可以實現到控制器操作方法的屬性,以根據業務邏輯進行修改。
我們可以考慮系統中的 MVC 過濾器。 屬性定義為類、方法、屬性和字段。
另請閱讀: MVC 項目
ASP.NET MVC 框架包含各種動作過濾器
授權:此操作過濾器能夠限制對特定用戶角色的訪問。
OutputCache :它是動作過濾器,在定義的時間內緩存控制器動作方法的結果。
HandleError :當這個控制器動作執行時,如果代碼失敗,它會處理特定場景中的錯誤。 它允許您創建自定義操作過濾器。
例如,我們可以創建自定義操作過濾器來執行自定義身份驗證系統。
資源
請求和響應生命週期流程中的過濾管道:
資源
過濾器提供了兩種在代碼中實現邏輯的類別,它執行不同的接口定義-
- 同步
- 異步
同步過濾器
在 Synchronization 過濾器中,我們可以在管道處理時運行管道前後的代碼; 我們可以將其視為OnStageExecuting和OnStageExecuted操作方法。
異步過濾器
異步過濾器使用單一方法描述,該方法具有以下方法
- 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()
{
返回視圖();
}
動作過濾器
我們可以在執行操作方法之前和操作方法之後描述操作過濾器。
它包含兩種類型的方法。
- OnActionExecuted
- 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);
}
結果過濾器
我們可以在執行動作方法之前和執行動作方法之後描述動作過濾器。
它包含兩種類型的方法。
- OnResultExecuted
- 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 使用指針向函數傳遞值和從函數接收值。 指針用於動態分配內存空間。