我对NancyFX非常陌生,并且在研究它的功能。我试图弄清楚的一件事是,是否可以使用多个模块(衍生自NancyModule
的类)组合一个大型站点,以便可以从多个模块定义构建路由。NancyFX中的路由可以使用多个模块组成吗?
例如,我有以下模块,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 /系统/ ABC”。我希望此路径在另一个定义“api/systems”的模块(即RootModule
)中定义,并在运行时构建可用系统列表。然后AbcModule
不知道它的容器定义了它相对于某个URL的所有路由。
NancyFX可能吗?
UPDATE。让我给你一个例子(我承认我误解了一些东西,在这种情况下请告诉我缺陷在哪里)。有一个Web服务将会公开一个潜在的大量服务或插件。每个插件负责自己的资源类型和资源结构,但为什么它应该知道它的容器的路由规则?想象一下,开发者正在使用包含在Nancy MusicModule中的插件“music”来定义路线“/ rock”,“/ metal”和“disco”。但是在生产机器上,他的代码被部署在一个网站中,MusicModule成为定义“音乐”,“体育”和“电影”路线的“业余爱好”服务的一部分。最后,还有一个定义“api”路径的根模块。
所以,这里是一个问题:MusicModule只能处理属于它的域的路由,剩下的完整路径会被其他模块添加,所以在只有MusicModule可用的“摇滚”资源的开发机器上可以可以直接在localhost:xxx/rock上访问,在生产机器上可以从其他(链接)模块中获得,所以访问路径是machinename:xxx/api/hobby/music/rock?
如果这是一个坏主意,请详细说明原因。从模块隐藏完整的路径路径会出现什么问题?
目前还不清楚你在问什么。你想有一个模块,动态“暴露”其他模块(及其路线)? – khellang
是的,并且它们的路线路径被组合,例如, RootModule定义将由AbcModule管理的根“api/systems/abc”。但是AbcModule并不知道这个路径,它定义了路由“域”,因此客户端应用程序可以在“api/systems/abc/domain”访问它。 –
这听起来像是在这里可怕地误解了一些东西......你可以用相关用例更新你的问题吗?为什么模块不知道自己的路径? – khellang