2013-09-27 51 views
7

有人可以解釋爲什麼授權屬性生命週期似乎是相對於它應用於的類或方法進行管理的嗎?這與相對於請求生命週期進行管理相反。授權屬性生命週期

如果我在類級別裝飾控制器,授權屬性構造函數只會跨多個請求調用到同一個控制器。如果我裝飾每個控制器方法,那麼我會爲每個調用的控制器方法調用新的授權屬性構造函數調用。

這是什麼行爲?我希望授權屬性創建發生每個請求。

+0

您是如何確定在應用於課程時僅調用一次的? AFAIK,控制器被實例化並且被每個請求銷燬。它有*有*,或者最終會出現交叉請求污染。有可能在Visual Studio中進行調試時出於某種原因避免了這種情況,但是如果您在實際IIS上針對每個請求都使用相同的控制器實例,那麼存在問題。 –

+0

克里斯,我不是在談論控制器的生命週期。相反,我在詢問AuthorizeAttribute的生命週期。 AuthorizeAttribute不是爲每個請求創建的,我期望它是。不幸的是,這導致了當前應用程序的一些問題,因爲我們必須在運行時修改角色。 – Daniel

回答

8

ASP.NET MVC將緩存ActionFilters並嘗試在後續請求中重用它們。實際授權將發生在每個請求上,但構造函數只會在第一個被調用。您不應該在ActionFilter中維護任何內部狀態。