我正在嘗試在操作上設置'授權'過濾器,創建我自己的ActionFilterAttribute,在此處執行數據庫查找以確定用戶是否可以訪問某個資源。使用數據庫的MVC3操作過濾器(EF 4.1 DBContext,Ninject)
在我的繼承自ActionFilterAttribute的類上,我創建了Injected(Ninject)屬性來容納我用於數據庫訪問的服務。我有一個無參數的構造函數,所以我可以將它用作我的動作的屬性。在'OnActionExecuting'方法中,我能夠訪問Injected屬性(它不爲null),但它使用的基本DBCotext已關閉。
這工作正常,直到MVC3的RTM,其中,發行說明中指出:
Breaking Changes: In previous versions of ASP.NET MVC, action filters are create per request except in a few cases. This behavior was never a guaranteed behavior but merely an implementation detail and the contract for filters was to consider them stateless. In ASP.NET MVC 3, filters are cached more aggressively. Therefore, any custom action filters which improperly store instance state might be broken.
我第一次使用此過濾器,它工作正常,但如果我刷新頁面或其他用戶訪問此過濾器,我得到的錯誤:
The operation cannot be completed because the DbContext has been disposed.
這是我想我應該期待給予突破變化的筆記。
我的問題是這樣的,完成我需要做什麼的首選/推薦方式是什麼?如果這是在ActionFilterAttribute中,還是應該在其他地方完成這個「授權」?
你有沒有想過這件事......有同樣的問題。 – 2012-10-01 00:58:38