日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何在 ASP.NET Core 中使用 ActionFilter

發(fā)布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 ASP.NET Core 中使用 ActionFilter 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ASP.NET Core MVC 中的 Filters 允許我們在 請求處理管道 中的某一個階段的之前和之后執(zhí)行自定義代碼,不同類型的 filter 對應(yīng)著 請求處理管道 的不同階段,比如說:ActionFilter 可以在 Action 方法的之前或者之后執(zhí)行自定義代碼,這篇文章我們就來討論 ASP.NET Core MVC 中內(nèi)建的 ActionFilter,為什么它非常有用以及在程序中如何使用它。

Filter 過濾器

其實在 ASP.NET Core MVC 中有很多的內(nèi)建 filter,大體羅列如下:

  • ActionFilters

它會在 Action 方法的執(zhí)行前和執(zhí)行后 執(zhí)行。

  • AuthorizationFilters

它會在 請求處理管道 的開始處被執(zhí)行,主要用來獲取用戶的 憑證信息 來驗證用戶是否被授權(quán)。

  • ResourceFilters

它會在 authorization 之后 和 模型綁定 之前被執(zhí)行,可以利用它實現(xiàn)一些緩存邏輯。

  • ExceptionFilters

它會捕捉到 請求處理管道 中的所有異常,所以可用它來實現(xiàn)一些自定義的異常處理。

到底用哪一種類型的 filter,還是取決于你到底想實現(xiàn)什么業(yè)務(wù),舉個例子,如果你想 短路 request,提前結(jié)束 pipeline 管道返回結(jié)果,是不是就可以用 ResourceFilters 哈,再舉一個例子,如果你想修改 Action 的入?yún)?并且想對 Action 的結(jié)果進行修改,那么 ActionFilter 就是你的最佳選擇。

ASP.NET Core MVC 中有一個特性叫 ActionFilterAttribute,它實現(xiàn)了如下接口 IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter, IOrderedFilter,可以利用它實現(xiàn)不同層級的Filter,如:Action級,Controller級,全局級,稍后我們將會一一討論。

創(chuàng)建自定義的 ActionFilter

你可以利用自定義的 ActionFilter 在 Action 方法的前后執(zhí)行一些可復(fù)用的邏輯,或許大家都知道,這就是所謂的 AOP 編程,除了 ActionFilterAttribute ,還有其他幾個 Filter 也有類似的 Attribute。

  • ResultFilterAttribute

  • ExceptionFilterAttribute

  • ServiceFilterAttribute

  • TypeFilterAttribute

除了上面這些快捷特性,最簡單粗暴的就是實現(xiàn) IActionFilter 接口 ,還可以實現(xiàn) 同步 和 異步 雙模式。

創(chuàng)建同步的 ActionFilter

下面的代碼片段展示了如何創(chuàng)建同步模式的 ActionFilter,繼承 IActionFilter 接口并實現(xiàn)它的 OnActionExecuting 和 OnActionExecuted 兩個方法。

public?class?SimpleActionFilter?:?IActionFilter{public?void?OnActionExecuting(ActionExecutingContext?context){//this?method?will?be?executed?before?execution?of?an?action?method?}public?void?OnActionExecuted(ActionExecutedContext?context){//this?method?will?be?executed?after?an?action?method?has?executed?}}

創(chuàng)建異步模式的 ActionFilter

下面的代碼片段展示了如何創(chuàng)建異步模式的 ActionFilter,繼承 IAsyncActionFilter 接口并實現(xiàn)它的 OnActionExecutionAsync 方法。

public?class?SimpleAsyncActionFilter?:?IAsyncActionFilter{public?async?Task?OnActionExecutionAsync(ActionExecutingContext?context,ActionExecutionDelegate?next){//code?written?here?will?be?executed?before?execution?of?an?action?method?await?next();//code?written?here?will?be?executed?after?execution?of?an?action?method?}}

配置 ActionFilter

文章之前也說過了,可以將 filter 過濾器 添加到不同級別的作用域中,這些作用域包括:action級, controller級,global級,這里就來演示如何將 filter 添加到 global級 ,仔細觀察一下我的 自定義filter 是如何添加到 ConfigureServices 方法下的 filter集合 中,如下代碼所示:

public?void?ConfigureServices(IServiceCollection?services){services.AddMvc(options?=>{options.Filters.Add(new?SimpleAsyncActionFilter());}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}

除了上面的方法,還可以用 typeof 的方式加入到 options 中,如下代碼所示:

public?void?ConfigureServices(IServiceCollection?services){services.AddMvc(options?=>{options.Filters.Add(typeof(SimpleAsyncActionFilter));}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}

總結(jié)一下:過濾器允許我們在 請求處理管道 中的某一個點的前后執(zhí)行一些自定義代碼,而且 ActionFilter 還有一個非常大的新改進是可以在 Http 請求管道中指定過濾器的執(zhí)行順序,關(guān)于更多的 filter 的高級特性,我會在后面的文章中和大家一起分享。

譯文鏈接:https://www.infoworld.com/article/3328648/how-to-use-action-filters-in-aspnet-core-mvc.html

總結(jié)

以上是生活随笔為你收集整理的如何在 ASP.NET Core 中使用 ActionFilter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。