2012-11-27 136 views
0

例如我有以下控制器 example.com/controller/方法被稱爲

有三種方法:

  • example.com/controller/method1
  • example.com/controller/method2
  • example.com/controller/validate

我想驗證運行,無論什麼方法被調用,我想確保驗證運行,因爲它包含代碼來驗證客戶端是否有有效的cookie集或從頁面啓動他們。

回答

4

我認爲你需要ActionFilter這將做驗證。創建您的自定義驗證過濾器屬性,覆蓋其OnActionExecuting方法(執行cookie驗證),並將屬性應用於控制器(或特定操作)。

+1

拍攝,我要遲到.. –

3

我建議在看行動過濾器:

的行爲過濾器是可以應用到一個控制器動作的屬性 - 即改變在其中執行操作的方式 - 或整個控制器。 ASP.NET MVC框架包含若干動作過濾器:

  • OutputCache - 此操作篩選器將控制器操作的輸出緩存指定的時間量。
  • HandleError - 此操作篩選器處理執行控制器操作時引發的錯誤。
  • 授權 - 此操作篩選器使您能夠限制對特定用戶或角色的訪問。

您還可以創建自己的自定義操作過濾器。例如,您可能想要創建自定義操作篩選器以實現自定義身份驗證系統。或者,您可能需要創建一個操作篩選器,以修改控制器操作返回的視圖數據。

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

1

取決於時機你想要做這個檢查,你可以把當這一點在你的控制器的構造函數,或覆蓋從基本控制器(通常AsyncController)OnActionExecuting。

如果你想在每個控制器上運行這個檢查,那麼我建議你創建一個ControllerBase類,然後你的其他控制器可以繼承它。

0

您應該將您的驗證代碼從操作移至自定義授權過濾器。與動作過濾器不同,授權過濾器是首先運行的過濾器,因此您應該將它們用於此類安全檢查。

已經有一個內置的授權過濾器Authorize做體面的工作,如果你想創建一個自定義的工作,我會建議擴展Authorize屬性並覆蓋所需的方法。 Authorize屬性可以避免緩存問題,這也是我推薦它的原因。