4

有没有办法为插件内属于相同服务的所有路由添加前缀?

我有几个服务。它们中的每一个都位于一个单独的类中(例如 UserService.cs..)。服务按类别分组,每个类别由一个项目表示。

所以,首先:我可以在插件中只注册一次服务,而不是在 AppHost 中注册每个服务,然后在 *Service.cs 中指定“[Route(”/somewhere"]”吗?

但真正的问题来了:即使第一个问题的答案是“否”,我是否可以在插件中指定属于它的每个服务都将继承的路由前缀?这边走:

我希望该服务位于 /admin/user 并且我想这样做:

插件方面:

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

在服务端,我想使用:

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

我可以以某种方式实现它吗?谢谢

4

2 回答 2

5

不。路由是按操作定义的,并且在任何隐藏配置上都不是上下文敏感的,并且不会级联 - 您所看到的就是您所期望的。

自动路由生成策略允许您推断和自定义​​自动路由约定。有关如何提供自己的路由生成策略的示例,请参阅RouteNamingConvention的实现。

于 2013-10-18T15:38:09.520 回答
1

现在,5 年后,我只想让人们知道我是如何“解决它”的。我认为这是一种丑陋的解决方法,更像是一种 hack,因为我无法让它以任何其他方式工作。

我能做到的唯一方法是覆盖 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;            
        }
    }
}

我的结构如下所示:

在此处输入图像描述

于 2018-02-07T08:35:25.690 回答