2

我有像這樣的自定義AuthorizeAttribute我應該調用base.OnAuthorization(filterContext)嗎?

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    if (filterContext.HttpContext.Request.IsAuthenticated) 
    { 
     var userInRole = CurrentUser.IsInRole(Roles); 

     // Etc... 
    } 
} 

我應該在這裏所有調用base.OnAuthorization(filterContext)

如果是這樣,它會做什麼?

回答

2

默認實現是開源的,可以查看here

它檢查用戶是否已通過身份驗證,然後進行檢查以確保在屬性上指定了用戶或角色。

我想真正的問題是,爲什麼你要編寫自定義AuthorizeAttribute當內置的一個已經做你在做什麼?

請注意,這將是簡單重寫AuthorizeCore方法(而不是OnAuthorization),如果你真的需要來定製它,因爲OnAuthorization方法的代碼來禁用輸出緩存使緩存視圖不能後就可以看到登出。

+0

這只是一個學習練習,而不是生產代碼。這對硬編碼用戶來說是一個非常粗糙的實現。關於輸出緩存的好處。 – BanksySan

+0

我錯過了什麼?我已經重寫了'AuthorizeCore'並且在其中插入了一個斷點,但是它從未被命中。 – BanksySan

+0

AuthorizeAttribute要求將其置於控制器,操作方法或註冊爲全局過濾器。此外,應用程序必須有一個安全框架才能執行任何操作。最簡單的選擇只是在首次創建項目時從Visual Studio附帶的默認模板開始(或在某些版本的Visual Studio中向模板添加授權)。 – NightOwl888