ASP.NET與Unity結合時出現問題。今天,我的控制器的構造函數需要經過身份驗證的用戶擁有一些參數,如果主叫用戶通過身份驗證,則只能由Unity填充參數。如果我調用導致這樣的控制器UNAUTHENTICATED的URL,則ASP.NET MVC管道會嘗試創建控制器,並且由於所需的對象在容器中不存在,所以Unit會引發異常。對於我使用WSFederationAuthenticationModule和SessionAuthenticationModule的身份驗證,在web.config中,我將「Forms」配置爲身份驗證模式,以強制ASP.NET重定向到登錄頁面。我期望如果用戶未經身份驗證但是直接重定向到登錄頁面,則管道不會創建控制器實例。ASP.NET MVC創建需要身份驗證的控制器,儘管用戶未經身份驗證會導致依賴注入問題
回答
我的控制器需要身份驗證的用戶的構造有一定的參數只能通過Unity一起填充如果主叫用戶進行身份驗證
那是你的問題的根源。這意味着該服務的構造函數做得太多了。構造器不應該僅僅存儲傳入的依賴關係。這樣你可以compose object graphs with confidence。
對象圖的構建通常應該是靜態的。這意味着解析後的對象圖不應該根據運行時條件而改變(也有例外,但這是一個很好的經驗法則)。不管用戶是否被授權都不重要,服務類別仍應被組合和注入。這意味着數據的授權和加載將在稍後的時間點完成;實際執行請求的時刻(緊接在構成對象圖之後)。
因此,不要在構造函數中完成這項工作,請將此工作移至執行操作方法的時刻。您可以將此邏輯移至執行身份驗證的服務,使用過濾器屬性或使用裝飾器實現此功能。
我的構造函數不會執行授權。已經有一個過濾器屬性(ON THE CONTROLLER!),並且此外還啓用了驗證功能。因此,我不明白爲什麼MVC運行時試圖創建控制器的實例,如果用戶未經身份驗證。所以呢?!我將稍後創建用戶特定的存儲庫實例,而不是使用構造函數注入。 –
MVC本身只需從IControllerFactory中請求一個'IController'(並調用'.Execute'),並允許工廠返回任何東西(只要它實現'IController')。它是處理授權的'System.Web.Mvc.Controller'類,它只能在被調用時進行授權。 MVC不能自己執行授權,因爲它允許您完全替換授權機制。 – Steven
- 1. C#依賴注入 - 身份驗證
- 2. asp.net MVC控制器和身份驗證
- 3. ASP.NET身份驗證問題
- 4. ASP.NET身份驗證問題
- 5. Laravel 5.3身份驗證依賴用戶
- 6. 需要ASP.NET身份驗證建議
- 7. Facebook身份驗證令牌未能創建Firebase身份驗證
- 8. asp.net mvc身份驗證cookie問題
- 9. MySQL未經身份驗證的用戶
- 10. ASP.Net MVC身份驗證
- 11. ASP.NET MVC Windows身份驗證
- 12. ASP.NET MVC身份驗證
- 13. ASP.NET MVC身份驗證Cookie
- 14. ASP.NET MVC LDAP身份驗證
- 15. ASP.NET MVC 1.0身份驗證
- 16. MVC身份驗證控制器
- 17. ASP.NET MVC用戶身份驗證
- 18. 未經身份驗證的用戶的會話管理
- 19. jqueryrotate.googlecode.com需要身份驗證
- 20. gems.contribsys.com需要身份驗證
- 21. ASP.NET身份驗證會話
- 22. 自定義身份驗證 - 用戶登錄但未經過身份驗證
- 23. Cognito不會將未經身份驗證的用戶切換爲經過身份驗證的用戶
- 24. ASP.NET身份驗證
- 25. ASP.NET身份驗證
- 26. ASP.net身份驗證
- 27. 未使用表單身份驗證的身份驗證
- 28. WCF自託管需要身份驗證
- 29. .NET身份驗證問題
- 30. 從Windows註銷經過身份驗證的ADFS,並以身份驗證的不同用戶身份登錄
請參閱http://stackoverflow.com/q/4460702/10245 –