【问题标题】:SignalR Autofac Inject Authorize AttributeSignalR Autofac 注入授权属性
【发布时间】:2016-08-16 20:29:21
【问题描述】:

我正在尝试找出一种将依赖项注入到 SignalR 中的 AuthorizeAttribute 的方法,类似于在 WebAPI 中完成的方式。

在 Web API 中,我知道我可以调用 builder.RegisterWebApiFilterProvider(config);,但我似乎无法找到 SignalR 的等价物。我能找到的最接近它的方法是PropertiesAutowired() 方法。

我已经尝试builder.RegisterType<MyAuthorizationAttribute>.PropertiesAutowired(); 我的属性看起来像

public class MyAuthorizationAttribute : AuthorizeAttribute
{
    public IRepository Repository { get; set; }

    public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, 
        IRequest request)
    {
        Repository.QueryStoredProcedure("Test");
        ...
    }

    protected override bool UserAuthorized(IPrincipal user)
    {
        ...
    }
}

但是Repository的实例每次都是null。

【问题讨论】:

  • 你能在你的集线器中注入依赖吗?
  • @Matei_Radu 是的。这按预期工作。

标签: .net dependency-injection attributes signalr autofac


【解决方案1】:

根据http://eworldproblems.mbaynton.com/2012/12/signalr-hub-authorization/

在 Autofac 中注册您的 MyAuthorizationAttribute:

builder.RegisterType<MyAuthorizationAttribute>().PropertiesAutowired();

然后在 app.MapSignalR() 之前:

 var myModule = container.Resolve<MyAuthorizationAttribute >(); 
 GlobalHost.HubPipeline.AddModule(new AuthorizeModule(myModule, myModule));

使用这段代码,您可以设置 global 授权模块用于集线器连接和方法调用。

可选地,这个模块可以用 IAuthorizeHubConnection 和 IAuthorizeHubMethodInvocation 授权者 这将全局应用于所有集线器和集线器方法。

在此处阅读更多信息https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.hubs.authorizemodule(v=vs.118).aspx

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2015-09-07
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多