ASP.NET Core過濾器:身份驗(yàn)證、異常處理、模型驗(yàn)證等

一.用過濾器來偷懶

使用過濾器的好處是實(shí)現(xiàn)關(guān)注點(diǎn)分離,盡量偷懶,避免重復(fù)代碼。
本文主要是介紹過濾器在webapi中的常用使用方法,但過濾器不是專屬于webapi,甚至消息隊(duì)列中都可以使用過濾器。
關(guān)于在asp.net core mvc中使用過濾器可以參考官方的英文文檔或者國內(nèi)的翻譯文檔
本文使用的代碼:ZHS

二.用法舉例說明

1.身份驗(yàn)證
這里不涉及到具體那種技術(shù)實(shí)現(xiàn)的身份驗(yàn)證,使用Microsoft.AspNetCore.Authorization自帶的驗(yàn)證,可以看到,[Authorize()]會去執(zhí)行對應(yīng)的驗(yàn)證(此處500是因?yàn)闆]有具體的驗(yàn)證,無法執(zhí)行),而[AllowAnonymous](允許任何人)和不加過濾器標(biāo)簽是可以訪問的。如果使用了全局的身份驗(yàn)證過濾器,這里的[Authorize]和 [AllowAnonymous]是會覆蓋掉之前的全局身份過濾器。
可以肯定的一點(diǎn):合理使用全局和局部過濾器就可以使我們避免寫過多的邏輯

身份過濾器

Authorize()

AllowAnonymous

2.異常處理
使用異常過濾器避免自己手寫一大堆try catch和記錄日志,同時對特定錯誤進(jìn)行特定的處理是很有效果的。除了必須的日志記錄,友好的返回結(jié)果也是很有意義的,如果是mvc可以直接返回一個對用戶友好的錯誤頁面,webapi則看情況是否要返回錯誤信息。
異常處理

異常返回結(jié)果

需要注意一點(diǎn):在方法年內(nèi)對異常進(jìn)行try catch會覆蓋掉異常過濾器的處理結(jié)果。如下圖,在使用異常過濾器的控制器中try catch返回結(jié)果。
try catch 處理

try catch 結(jié)果

3.模型綁定
這是最常見也是最偷懶的地方,如果不使用過濾器,你控制器可能是如下圖:
不用模型驗(yàn)證的處理

而現(xiàn)在結(jié)合模型驗(yàn)證可以將邏輯轉(zhuǎn)移到視圖模型里面:
模型驗(yàn)證

而原來的過濾器就會瘦身:
不需要再寫驗(yàn)證邏輯的控制器

由于模型驗(yàn)證是比較常用和具有普適性的,所以我在這里使用如下的全局過濾器(避免Startup膨脹,使用擴(kuò)展方法):
模型綁定的過濾器

全局調(diào)用

這樣偷懶的結(jié)果也如預(yù)期:
數(shù)字是必需的

數(shù)字必須在1到1000之間


本文采用 知識共享署名-非商業(yè)性使用-相同方式共享 3.0 中國大陸許可協(xié)議
轉(zhuǎn)載請注明:作者 張蘅水

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,036評論 25 709
  • 一般來講,正常的流程是pre-->route-->post 在pre過濾器階段拋出異常,pre--> error ...
    二月_春風(fēng)閱讀 9,489評論 3 8
  • 關(guān)于選擇,不是在岔路口才有,毫無防備的時候總會冒出一個。所有的選擇不分大小,不分多少,因其關(guān)乎未來的路,因魚和熊掌...
    豌豆程程閱讀 361評論 0 0
  • 醫(yī)院的日子不是用天來描述的,每天忙碌的只知道上什么班,往往只有做手術(shù)的病人有點(diǎn)印象和記憶外其他的恐怕大多數(shù)都不知道...
    冰月月閱讀 572評論 13 15

友情鏈接更多精彩內(nèi)容