2014-02-28 27 views
1

我對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?

如果這是一個壞主意,請詳細說明原因。從模塊隱藏完整的路徑路徑會出現什麼問題?

+0

目前還不清楚你在問什麼。你想有一個模塊,動態「暴露」其他模塊(及其路線)? – khellang

+0

是的,並且它們的路線路徑被組合,例如, RootModule定義將由AbcModule管理的根「api/systems/abc」。但是AbcModule並不知道這個路徑,它定義了路由「域」,因此客戶端應用程序可以在「api/systems/abc/domain」訪問它。 –

+0

這聽起來像是在這裏可怕地誤解了一些東西......你可以用相關用例更新你的問題嗎?爲什麼模塊不知道自己的路徑? – khellang

回答

2

你所要求的是運行在不同的根網址,其中/api/systems/不是你的應用程序的一部分,但你的主機環境。南希不理解全局根路徑的概念。通過攔截傳入請求(使用應用程序級別的Before鉤子)並重寫傳入URL的URL,可以非常輕鬆地完成此操作。

+0

我明白了。我看到之前掛鉤的例子,但我不知道沒有其他(更透明)的配置方式。 感謝您的快速響應。 –

相關問題