2013-07-17 120 views
0

我有一個基於mvc3的web服務,它使用Ninject來管理它的動作過濾器,這一切都很好。不過,現在我必須將SignalR集線器納入混合,並且如果可能的話,理想情況下希望在這些新集線器上重新使用現有的動作過濾器。Ninject with ActionFilters and SignalR

其中一個最重要的過濾器是CookieAuthentication過濾器,它基本上檢查給定的請求是否包含正確的身份驗證Cookie,如果該cookie不存在或無效,則會將filtercontext.result對象設置爲自定義UnauthorisedResult對象。所以在這個例子中,你可以使用這個功能,因爲SignalR據我所知不知道行動的結果,所以不知道它是否會自動取消請求等。

我試過Google搜索,但無法找到關於該主題的很多信息,我假設你不能混淆它們,因爲這兩個框架只共享底層ASP框架而不是MVC框架。

回答

1

你不能。 ActionFilters僅適用於MVC,在使用SignalR時不會運行。唯一的共同點(就是你意識到的)是ASP.NET本身。這意味着你可以編寫一個HttpModule而不是一個動作過濾器。

您可以瞭解更多有關SignalR安全位置: http://www.asp.net/signalr/overview/security

+0

啊剛纔的那個人,我在趕時間,所以我應該提到我已經簽出的文檔,確保樞紐等,然而這一切似乎使用默認的ASP.NET授權,我希望避免這種情況,並且只是有辦法檢查cookie與請求的數據庫,而這些功能在我使用的框架內已經存在,並且都基於HttpRequest對象。然而,AuthoriseAttribute似乎對用戶有效,而不是http請求,所以我應該在那裏獲取'HttpContext.Current.Request'並忽略用戶對象? – Grofit

+0

那麼,它使用「主機」認證。在這種情況下,主機是ASP.NET,在ASP.NET中,您可以掛接一個IHttpModule的AuthorizeRequest並將IPrincipal設置爲上下文無論您滿意。 – davidfowl