8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的過濾器】

来源:https://www.cnblogs.com/caofangsheng/archive/2019/03/21/10574559.html
-Advertisement-
Play Games

ASP.NET Filers用來在MVC框架的不同請求處理階段,註入額外的邏輯。過濾器為橫切關註點提供了一種方法(日誌記錄,授權,緩存)。 在這篇文章中,我將會向你介紹MVC框架支持的各種不同種類過濾器,怎樣控制過濾器的執行,怎樣創建和使用過濾器。我們可以創建自定義的過濾器。在每一個請求中,控制器中 ...


         ASP.NET Filers用來在MVC框架的不同請求處理階段,註入額外的邏輯。過濾器為橫切關註點提供了一種方法(日誌記錄,授權,緩存)。

       在這篇文章中,我將會向你介紹MVC框架支持的各種不同種類過濾器,怎樣控制過濾器的執行,怎樣創建和使用過濾器。我們可以創建自定義的過濾器。在每一個請求中,控制器中的方法會檢查,是否用戶是正確授權的,如果是正確授權的用戶,就會允許用戶執行相應的方法,顯示相應的視圖給用戶。

       ASP.NET支持四種類型的過濾器。Authentication過濾器是在ASP.NET MVC 5中介紹的。每種過濾器都允許你在請求的不同階段,註入相應邏輯處理。

Filters Type【過濾器類型】 Interface【介面】  
Authentication【驗證過濾器】 IAuthenticationFilter 在所有其他的過濾器或者Action方法之前執行
Authorization【授權過濾器】 IAuthorizationFilter 在允許其他過濾器或者Action方法之前,執行
Action【Action過濾器】 IActionFilter 在Action方法之前或者之後執行
Result【結果過濾器】 IResultFilter 在Action方法的執行結果之前或者之後執行
Exception【異常過濾器】 IExceptionFilter 只有在其他過濾器,Action方法,或者Action的執行結果執行的時候出現異常,才會執行異常過濾器

ASP.NET 中的過濾器類型以及它們的執行順序

1.Authentication Filters【驗證過濾器】

Authentication 過濾器在任何其他過濾器或者Action方法之前執行。Authentication 過濾器確保你是合法還是非法用戶。它實現了IAuthenticationFilter介面。

2.Authorization Filters【授權過濾器】

AuthorizeAttribute和RequireHttpsAttribute都是Authorizatio過濾器的例子。授權過濾器用來檢查用戶是否有訪問許可權。授權過濾器實現了IAuthorizationFilter介面。

3.Action Filters【Action過濾器】

Action過濾器是一個特性,你可以應用到控制器的方法上,也可以應用到整個控制器上。這個過濾器將會在Action方法開始執行之前或者開始執行之後執行,以及Action執行之後開始調用。

Action過濾器實現了IActionFilter介面,有兩個方法OnActionExecuting和OnActionExecuted。OnActionExecuting在Action方法之前執行,並給了一個機會來取消執行Action方法。這些過濾器包含了一些邏輯,在Action方法執行之前或者執行之後調用,你可以使用Action過濾器,來修改控制器中的Action方法返回的視圖數據。

4.Result Filters【結果過濾器】

OutputCacheAttribute類就是結果過濾器的一個例子。結果過濾器實現了IResultFilter介面。和IActionFilter類似,也有OnResultExecuting和OnResultExecuted兩個方法。這些過濾器包含一些邏輯,在ViewResult開始執行之前或者之後調用。你可以使用結果過濾器,來修改視圖的結果,在視圖呈現到瀏覽器之前。

5.Exception Filters【異常過濾器】

HandleErrorAttribute類是ExceptionFilters的一個例子。異常過濾器實現了IExceptionFilter介面,異常過濾器在程式運行的過程中如果發生了未處理的異常就會執行。這些過濾器可以用做異常過濾器,用來處理控制器中的Action方法的錯誤,或者Action方法返回結果的錯誤。你可根據需要以重寫這些方法。

 

好了,上面的理論知識介紹的差不多,我們來創建一個項目,練練手,實際操作一下:

1.在ASP.NET MVC 5中創建一個自定義的Authentication過濾器

創建一個MV項目:

在項目中,創建一個文件夾AuthData,添加我們自定義的類AuthAttribute;

 

 IAuthenticationFilter介面定義了兩個方法:OnAuthentication和OnAuthenticationChallenge。OnAuthentication先執行,用來處理需要的驗證邏輯。OnAuthenticationChallenge用來根據用戶驗證的結果,進一步做限制處理。在OnAuthentication方法中,我寫了一些代碼用來對用戶作驗證,OnAuthenticationChallenge中,我寫了一些代碼,用來執行其他任務。

 現在,讓我們來測試一下,我們寫的自定義驗證過濾器;

 

 運行項目,然後註冊:

 

 

 

 

 

 你還可以管理你的賬戶信息:

 

 2.現在看看 Authorization Filter:

Authorization確保只有經過允許的用戶才能訪問。這些過濾器在Action方法執行之前調用,實現了IAuthorizationFilter介面。包含了一個方法OnAuthorization。

為了驗證Authorization,我們對剛纔的AuthAttribute類作個修改。我們重寫了AuthorizeAttribute類中的AuthorizeCore(HttpContextBase httpContext)方法。

現在打開Home控制器,修改代碼:

 

運行項目:輸入剛纔註冊的賬號和密碼:可以看到授權通過,登錄成功了。

 還可以這樣:在About方法上標識特性,然後允許項目,點擊關於按鈕,就會彈出來登錄頁面,讓登錄:

還可以限制,只讓某個用戶看到About頁面,可以這樣做:這裡,我只讓[email protected]這個用戶訪問About頁面。

 

 現在我們運行項目,重新註冊一個賬號[email protected].

可以看到,[email protected]這個賬號訪問不了About頁面。又彈出來了登錄頁面。

 

 3.再來看看Action Filter,又下麵的幾個Action Filters:

  1. Output Cache:緩存控制器的Action
  2. Handle Error:當控制器的方法報錯的時候,處理錯誤
  3. Authorize :允許你限制有相應許可權的才能訪問

Output Cache

下麵的例子,指定返回值將會被緩存5秒

 

 

 

再看看Handle Error例子:

為了實現Handle例子,我們改裝一下AuthAttribute類:

註意我們需要創建一個靜態的錯誤頁面:

 

 然後運行項目,在地址欄輸入

 

 然後就看到了:錯誤頁面》》

 

 輸入大於100的試試:

 

 

 

 

 好了 ,以上就是Filters的全部內容,有不明白的,歡迎留言。目前這個0基礎系列,暫時先告一段落,我打算寫一些高級的內容,後續如果有基礎的知識需要講,就接著這個系列寫。謝謝大家支持。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Kafka是一種高吞吐量的分散式發佈訂閱消息系統 1、優點:① 通過磁碟數據結構提供消息的持久化,這種結構對於即使數以TB的消息存儲也能夠保持長時間的穩定性能。② 高吞吐量:即使是非常普通的硬體Kafka也可以支持每秒數百萬的消息。③ 支持通過Kafka伺服器和消費機集群來分區消息。④ 支持Hado ...
  • 題目: 給定任一個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到一個新的數字。一直重覆這樣做,我們很快會停在有“數字黑洞”之稱的 6174,這個神奇的數字也叫 Kaprekar 常數。 例如,我們從6767開始, ...
  • 在Java中參數的傳遞主要有兩種:值傳遞和參數傳遞; 下麵是對兩種傳遞方式在記憶體上的分析: 一:值傳遞 解釋:實參傳遞給形參的是值 形參和實參在記憶體上是兩個獨立的變數 對形參做任何修改不會影響實參 代碼示例如下: 結果:20 為什麼?看下麵分析: 通俗的講法就是:形參只是實參創建的一個副本,副本改變 ...
  • Python是門很神奇的語言,歷經時間和實踐檢驗,受到開發者和數據科學家一致好評,目前已經是全世界發展最好的編程語言之一。簡單易用,完整而龐大的第三方庫生態圈,使得Python成為編程小白和高級工程師的首選。 在本文中,我們會分享不同於市面上的python數據科學庫(如numpy、padnas、sc ...
  • 修飾符用於聲明在外部實現的方法。extern 修飾符的常見用法是在使用 Interop 服務調入非托管代碼時與 DllImport 屬性一起使用;在這種情況下,該方法還必須聲明為 static,聲明後的方法可以直接使用,如下麵的示例所示: [DllImport("avifil32.dll")] pr ...
  • 深入理解C#第一部分,第一章介紹了C#開發得進化史. 1 從數據類型定義引入c#1到4中得改變 c#2:強類型集合(泛型) c#3:自動實現得屬性和簡化得初始化 c#4:命名實參 2 排序和過濾 排序 : c#2 從強類型得排序到使用委托方法 查詢: 引入了Linq\COM\非同步編程概念 .net[ ...
  • 一、運行效果圖 二、圖標字體文件下載 http://fontawesome.dashgame.com/(這個網址可以下載圖標字體文件) http://www.fontawesome.com.cn/(這個網址可以下載圖標字體文件和查圖標編碼) (2)解壓文件,複製文件備用。 (3)查圖標編號 二、開始 ...
  • 下載地址:https://www.telerik.com/download/fiddler 一、Composer簡介 右側Composer區域,是測試介面的界面: 相關說明: 1.請求方式:點開可以勾選請求協議是get、post等 2.url地址欄:輸入請求的url地址 3.請求頭:第三塊區域可以輸 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...