Ninject с ActionFilters и SignalR

У меня есть веб-служба на основе mvc3, которая использует Ninject для управления фильтрами действий, и все работает нормально. Однако теперь мне нужно внедрить концентратор SignalR в микс, и в идеале я хочу повторно использовать существующие фильтры действий на этих новых концентраторах, если это возможно.

Одним из наиболее важных фильтров является фильтр CookieAuthentication, который в основном проверяет, содержит ли данный запрос правильный файл cookie для аутентификации, если файл cookie отсутствует или недействителен, он устанавливает объект filtercontext.result в пользовательский объект UnauthorizedResult. Итак, в этом примере вы можете использовать эту функцию, поскольку SignalR, насколько мне известно, понятия не имеет о результатах действий, поэтому не уверен, что он будет автоматически отменять запросы и т. д.

Я пробовал гуглить, но не могу найти много информации по этой теме, я предполагаю, что вы не можете их смешивать, поскольку обе платформы используют только базовую структуру ASP, а не структуру MVC.


person Grofit    schedule 17.07.2013    source источник


Ответы (1)


Вы не можете. ActionFilters предназначены только для MVC и не запускаются при использовании SignalR. Единственная точка соприкосновения (как вы понимаете) — это сама ASP.NET. Это означает, что вы можете написать HttpModule, но не фильтр действий.

Вы можете узнать больше о безопасности SignalR здесь: http://www.asp.net/signalr/overview/security

person davidfowl    schedule 17.07.2013
comment
Ах, просто человек, я был в спешке, поэтому я должен был упомянуть, что я уже проверил документацию по защите концентраторов и т. Д., Однако все это, похоже, использует авторизацию ASP.NET по умолчанию, которую я надеялся избежать и просто иметь способ проверить cookie по базе данных для запросов, для которых функциональность уже существует в рамках используемой им структуры, и все это основано только на объектах HttpRequest. Однако AuthoriseAttribute, похоже, работает против пользователя, а не HTTP-запроса, поэтому я должен просто получить HttpContext.Current.Request и игнорировать объект пользователя? - person Grofit; 17.07.2013
comment
Нет, он использует аутентификацию хоста. В этом случае хостом является ASP.NET, а в ASP.NET вы можете подключить AuthorizeRequest IHttpModule и установить IPrincipal в контексте так, как вам угодно. - person davidfowl; 17.07.2013