asp.net之ActionFilter過濾器
這篇文章主要為大家詳細介紹了asp.net core MVC 過濾器之ActionFilter過濾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本系類將會講解asp.net core MVC中的內建過濾器的使用,將分為以下章節
asp.net core MVC 過濾器之ExceptionFilter過濾器(一)
asp.net core MVC過濾器之ActionFilter過濾器(二)
asp.net core MVC 過濾器之ResultFilter過濾器(三)
asp.net core MVC 過濾器之ResourceFilter過濾器(四)
asp.net core MVC 過濾器之AuthorizationFilter過濾器(五)
簡介
Action過濾器將在controller的Action執行之前和之後執行相應的方法。
實作一個自訂Action過濾器
自訂一個全域異常過濾器需要實作IActionFilter介面
public class ActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { Console.WriteLine("action执行之后"); } public void OnActionExecuting(ActionExecutingContext context) { Console.WriteLine("action执行之前"); } }
IActionFilter需要實作兩個方法OnActionExecuted,OnActionExecuting。 OnActionExecuting將在Action之前執行,OnActionExecuted在Action之後執行。
知道原理之後我們就可以利用其特性來簡化我們的程式碼,在MVC中一個重要的概念就時Model驗證,我們定義Model約束,然後在Action中驗證Model是否綁定成功,在我們的Action中重複地寫如下程式碼
[HttpGet] public ActionResult Get() { if (!ModelState.IsValid) return BadRequest("参数错误!"); }
這樣重複的程式碼不僅增加程式碼複雜都也不美觀,我們可以在ActionFilter中自動完成
public void OnActionExecuting(ActionExecutingContext context) { if (context.ModelState.IsValid) return; var modelState = context.ModelState.FirstOrDefault(f => f.Value.Errors.Any()); string errorMsg = modelState.Value.Errors.First().ErrorMessage; throw new AppException(errorMsg); }
當Model綁定錯誤時,我們拋出異常訊息,並在上一章節的異常過濾器ExceptionFilter中捕獲,返回錯誤訊息給請求方。
我們也可以利用ActionFilter的特性來記錄Action的執行時間,當Action執行時間過慢時輸出警告日誌
public class ActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { var httpContext = context.HttpContext; var stopwach = httpContext.Items[Resources.StopwachKey] as Stopwatch; stopwach.Stop(); var time = stopwach.Elapsed; if (time.TotalSeconds > 5) { var factory = context.HttpContext.RequestServices.GetService<ILoggerFactory>(); var logger = factory.CreateLogger<ActionExecutedContext>(); logger.LogWarning($"{context.ActionDescriptor.DisplayName}执行耗时:{time.ToString()}"); } } public void OnActionExecuting(ActionExecutingContext context) { var stopwach = new Stopwatch(); stopwach.Start(); context.HttpContext.Items.Add(Resources.StopwachKey, stopwach); } }
上面的程式碼利用使用HttpContext傳遞一個Stopwach來計算action的執行時間,並在超過5秒時輸出警告日誌。
註冊全域篩選器
註冊方法與ExceptionFinter相同。找到系統根目錄Startup.cs文件,修改ConfigureServices方法如下
services.AddMvc(options => { options.Filters.Add<ActionFilter>(); });
以上是asp.net之ActionFilter過濾器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Vue報錯:無法正確使用filters中的過濾器,怎麼解決?引言:在Vue中,過濾器(filters)是常用的功能,可以用來格式化資料或過濾。然而,在使用過程中,有時我們可能會遇到無法正確使用過濾器的問題。本文將介紹一些常見的原因和解決方法。一、原因分析:過濾器未正確註冊:Vue中的過濾器需要先註冊,才能在模板中使用。如果過濾器未成功註冊,

Vue技術開發中如何進行資料篩選和排序在Vue技術開發中,資料篩選和排序是非常常見且重要的功能。透過資料篩選和排序,我們可以快速查詢和展示我們需要的信息,提高用戶體驗。本文將介紹在Vue中如何進行資料篩選和排序,並提供具體的程式碼範例,幫助讀者更好地理解和運用這些功能。一、資料篩選資料篩選是指依照特定的條件篩選出符合要求的資料。在Vue中,我們可以透過comp

PHP電子郵件過濾器:過濾並辨識垃圾郵件。隨著電子郵件的廣泛應用,垃圾郵件的數量也不斷增加。對於用戶來說,接收到的大量垃圾郵件會導致資訊過載和時間浪費。因此,我們需要一種高效的方法來過濾和識別垃圾郵件。本文將介紹如何使用PHP編寫一個簡單但有效的電子郵件篩選器,並提供具體的程式碼範例。郵件過濾器基本原理郵件過濾器的基本原理是透過分析郵件的內容和屬性,判斷其是否

Vue3中的過濾器函數:優雅的處理資料Vue是一個流行的JavaScript框架,擁有龐大的社群和強大的插件系統。在Vue中,過濾器函數是一種非常實用的工具,允許我們在模板中對資料進行處理和格式化。 Vue3中的過濾器函數有了一些改變,在這篇文章中,我們將深入探討Vue3中的過濾器函數,學習如何使用它們優雅地處理資料。什麼是濾波器函數?在Vue中,過濾器函數是

FILTER_VALIDATE_URL常數用於驗證URL。標誌FILTER_FLAG_SCHEME_REQUIRED−URL必須符合RFC標準。 FILTER_FLAG_HOST_REQUIRED−URL必須包含主機名稱。 FILTER_FLAG_PATH_REQUIRED−URL必須在網域後面有路徑。 FILTER_FLAG_QUERY_REQUIRED−URL必須有查詢字串。傳回值FILTER_VALIDATE_URL

Vue中使用插件實作自訂過濾器的技巧Vue.js提供了一種方便的方式來處理視圖資料過濾的需求,即過濾器(Filter)。過濾器主要負責將視圖中的資料進行格式化和處理,使資料更加直觀和易於理解。 Vue內建了一些常用的過濾器,例如日期格式化、貨幣格式化等,同時也支援自訂過濾器。本文將介紹如何使用Vue插件實作自訂過濾器的技巧,並提供一些實用的過濾

解決Tomcat中文亂碼問題的幾種方法,需要具體程式碼範例在Web開發中,我們經常會遇到Tomcat中文亂碼問題。這種問題在處理中文字符時會導致亂碼或顯示為方框、問號等字符,給用戶帶來不好的體驗。為了解決這個問題,本文將介紹幾種常用的方法,並提供具體的程式碼範例。修改Tomcat設定檔在Tomcat的安裝目錄下找到conf/server.xml文件,搜尋默認

pythonLogging模組是一個功能強大的工具,用於管理應用程式的日誌記錄。它提供了一個靈活且可配置的框架,使開發人員能夠控制日誌資訊的產生、處理和顯示。日誌記錄級別Logging模組定義了幾個日誌記錄級別,指定日誌訊息的重要性。這些級別按嚴重性遞增排序:DEBUG:用於調試和開發目的,記錄詳細的調試資訊。 INFO:記錄常規應用程式信息,例如事件和操作。 WARNING:記錄潛在問題或異常情況,但不一定會中斷應用程式。 ERROR:記錄嚴重錯誤或異常,可能導致應用程式故障。 CRITICAL:記錄危及
