MVC 自定義過濾器 特性來實現登入授權及驗證

2021-09-07 07:33:07 字數 2143 閱讀 3862

最近悟出來乙個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。

十年河東十年河西,莫欺少年窮

學無止境,精益求精

最近在做自學mvc,遇到的問題很多,索性一點點總結下。

寫過webform專案的童鞋都知道,在執行page_load()之前,會執行:oninit(eventargs e),那麼在mvc中,在執行action方法之前,會執行什麼呢?在執行mvc action之後,又會執行什麼呢?下面給出答案:

1、onactionexecuting  在執行操作方法之前由 mvc 框架呼叫。

2、onactionexecuted  在執行操作方法後由 mvc 框架呼叫。

3、onresultexecuting  在執行操作結果之前由 mvc 框架呼叫。

4、onresultexecuted  在執行操作結果後由 mvc 框架呼叫。

根據上述,我們可以看出,在執行action方法之前,mvc會執行onactionexecuting()方法,這個方法在控制器中並沒有展示給我們,需要我們進行重寫。

下面以程式為例進行說明:

namespace

weixinapi.controllers

else

}public

mangercontroller()

public

actionresult index()

public

actionresult wei_configs()}}

我們寫乙個父親控制器,在這個父親控制器中,我們重寫這個方法,然後在需子控制器中繼承父親控制器即可,**如下:

看到這兒,相信做過webform的童鞋就會想起basepage.cs中的如下**:

那麼,這樣定義乙個父親控制器就算完美了嗎?如果有個控制器需要繼續另外乙個類怎麼辦?

由於其已經繼承了父親控制器,那麼子控制器就不能再繼承其他類,這樣顯然降低了程式的可擴充套件性,我們應當怎麼辦呢?

還好,mvc為我們提供了過濾器,actionfilterattribute裡也有onactionexecuting方法,跟controller中的onactionexecuting方法一樣, 同是抽象實現了iactionfilter介面。

我們新建派生類如下:

namespace

catch

(exception ex)

if (authticket != null &&filtercontext.httpcontext.user.identity.isauthenticated)//如果cookies不為null 也通過驗證

else}}

}

至於mvc登入授權的方法,大家可以參考我的部落格:mvc 登入認證與授權及讀取登入錯誤碼

在此,我們深究下actionfilterattribute 類的說明:

中文名稱解釋為特性、屬性

mvc的資料註解與驗證中會用到好多特性,譬如:

那麼,我們應當怎麼使用新建的 authenticationattribute 類呢?

根據需求,大家可在類範圍內使用這個特性,亦可在action方法頭上使用這個特性。

以上便是mvc自定義過濾器特性來驗證授權登入資訊的方法

祝大家有個好心情,謝謝

@陳臥龍的部落格

自定義過濾器

這裡的過濾器的作用主要是在業務邏輯裡面判斷,傳遞的引數是否有誤,然後在實現類裡面去判斷具體的業務資料,執行流程和servlet的過濾器相類似,但是執行時機和作用大不相同,servlet的執行時機是在請求資源,在達到control之前去執行,通過執行鏈,我們的這個過濾器是在control裡,如下.先定...

自定義過濾器和全域性過濾器

過濾器中必須有返回值 一般使用花括號 插值,管道符前是要過濾的元素,管道符之後是過濾方法 p 過濾方法中有乙個引數,這個引數就是傳進來的要過濾的元素 過濾器 filters 使用過濾器時出現死迴圈 因為在將原陣列排序後賦值給原陣列,引用空間沒有變化,過濾一直在執行 解決辦法 使用擴充套件符將陣列賦值...

自定義時間過濾器

實現步驟 第一步,引導入 datetime 第二步,引入乙個建立時間,或者 直接寫死乙個時間 第三步,註冊乙個時間過濾器 第四步,實現過濾器的 第五步,在模板中呼叫 示例 一 字典中的 create time datetime 2017,10,20,16,19,0 二 過濾器 def handel ...