2013-10-18 30 views
4

有沒有辦法爲屬於插件內部相同服務的所有路由添加前綴?在插件中註冊服務前綴 - ServiceStack

我有幾項服務。它們中的每一個都保留在一個單獨的類中(例如UserService.cs ..)。服務按類別分組,每個類別由一個項目表示。

所以,第一:代替通過指定「〔路線(」 /某處「]」我可以註冊服務僅在插件一次

在APPHOST登記每個服務,然後在* Service.cs?

但這裏說到真正的問題:即使回答第一個問題將是「不」,我可以指定每個服務屬於它的插件路由前綴,將繼承 這樣:

我希望服務在/管理員/用戶,我想這樣做:

插件方:

appHost.RegisterService<UserService>("/admin"); 

,並在serviceside我想用:

[Route("/user")] 
    public class UserService: Service 

我可以採用某種實現它? 謝謝

+0

正是我的問題,一些5年以後=) – Ted

回答

5

編號路由是按操作定義的,對任何隱藏配置都不是上下文敏感的,也不會級聯 - 您看到的是您所期望的。

Auto Route generation strategies允許您推斷和自定義​​自動路由約定。有關如何提供自己的路線生成策略的示例,請參閱RouteNamingConvention的實施。

+0

感謝蝙蝠俠!!!! – Pizzaboy

1

現在,5年後,我想讓我知道我是如何「解決它」的。我認爲這是一種醜陋的解決方式,更像是一種黑客攻擊,因爲我無法以其他方式使用它。

我能做到的唯一方法就是覆蓋GetRouteAttributes並對其進行硬編碼,如下所示。正如你所看到的,如果我找到匹配的話,我正在查看字符串表示並對其進行硬編碼。這似乎解決了@PizzaBoy問的問題,以及我在尋找什麼。

namespace tWorks.Alfa.Modules.ModuleRestApiService 
{ 
    public class AppHost : AppSelfHostBase 
    { 
     public AppHost() : base("HttpListener Self-Host", typeof(Services.AlfaProService.AlfaProService).Assembly) 
     { 
     } 

     public override void Configure(Funq.Container container) { } 

     public override RouteAttribute[] GetRouteAttributes(Type requestType) 
     { 
      var routes = base.GetRouteAttributes(requestType); 
      if (requestType.FullName.Contains(nameof(Services.AlfaConnectService.AlfaConnectService))) 
      { 
       routes.Each(x => x.Path = "/alfaconnect" + x.Path); 
      } 
      else if (requestType.FullName.Contains(nameof(Services.AlfaProService.AlfaProService))) 
      { 
       routes.Each(x => x.Path = "/alfapro" + x.Path); 
      } 
      return routes;    
     } 
    } 
} 

我的結構是這樣的:

enter image description here