NancyFX中的路由可以使用多个模块组成吗?

时间:2014-02-28 11:11:40

标签: url-routing nancy

我对NancyFX很陌生并正在研究它的功能。我试图弄清楚的是,是否有可能使用多个模块(从NancyModule派生的类)组成一个大型站点,从而可以从多个模块定义构建路径。

例如,我有以下模块,AbcModule

public class AbcModule : NancyModule
{
    public AbcModule() : base("/api/systems/abc")
    {
        Get["/"] = _ => "ABC API Host";

        Get["/domains/"] = _ => Response.AsJson(Domains.All);
        Get["/domains/{name}"] = x => Response.AsJson(Domains.All.Single(y => x.Name == y.Name));
    }
}

我不想要的是暴露“api / systems / abc”。我希望在另一个定义“api / systems”的模块(即RootModule)中定义此路径,并在运行时构建可用系统列表。然后AbcModule不知道它的容器定义了相对于某个URL的所有路由。

NancyFX可以吗?

更新即可。让我举个例子(我很乐意承认我误解了一些东西,在这种情况下请告诉我哪里有缺陷)。有一个Web服务将公开可能大量的服务或插件集合。每个插件都负责自己的资源类型和资源结构,但为什么要知道它的容器的路由规则呢?想象一下,开发人员正在使用包含在Nancy MusicModule中的插件“music”来定义路径“/ rock”,“/ metal”和“disco”。但是在生产机器上,他的代码部署在一个网站中,MusicModule成为定义“音乐”,“体育”和“电影”路线的“爱好”服务的一部分。最后,有一个定义“api”路由的根模块。

所以这里有一个问题:MusicModule只能处理属于其域的路由,其余的完整路径由其他模块添加,因此在只有MusicModule可用的开发机器上可以使用“rock”资源直接在localhost:xxx / rock访问,在生产机器上它从其他(链接)模块公开,所以访问路径是machinename:xxx / api / hobby / music / rock?

如果这是一个坏主意,请详细说明原因。从模块中隐藏完整的路径路径会出现什么问题?

1 个答案:

答案 0 :(得分:2)

您要求的是在不同的根网址上运行,其中/api/systems/不是您的应用程序的一部分,而是您的托管环境。南希不了解全局根路径的概念。通过拦截传入的请求(使用应用程序级别的Before挂钩)并重写传入URL的URL,可以非常轻松地完成此操作。