2013-07-17 187 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