2015-04-01 173 views
5

前段時間,我創建了一個包含Web API 2項目(向移動設備提供JSON數據)和一個類庫(包括我的數據訪問服務)的解決方案。同一解決方案中的MVC和Web API項目

Web API項目使用Ninject for DI,一切正常。

現在我需要爲幾個網頁添加一個單獨的MVC項目。該API應可從www.example.com/api/controller訪問,而網站應通過www.example.com/controller訪問。

問題是,這兩個中的每一個都有不同的「Register」方法,看起來不兼容的路由集合。如果我將MVC項目設置爲啓動項目,則不會註冊api的路由,反之亦然。如果我設置了「多個啓動項目」,他們在不同的端口上運行,這不是我的一杯茶。

如何將MVC項目設置爲啓動項目,同時爲它們註冊所有路由?

還有一件事。由於Web API項目更早創建,因此Ninject配置已寫入其中。當然,新的MVC項目中需要來自類庫項目的一些服務。我是否必須將N​​inject配置移動到MVC項目,或者他們只是在Web API項目啓動時運行而工作?

+0

我有完全相同的問題。謝謝你的問題。希望你已經解決了你的問題。 – 2018-01-20 00:01:41

回答

10

這2個項目彼此像2個不同應用獨立即使它們在相同溶液

要成功,你努力實現你必須:

1)部署你的MVC項目www.example.com(主虛擬應用程序)。

2)部署您的WebAPI項目www.example.com/apiAPI文件夾是虛擬應用程序)。不要忘記從您的WebAPI路線中刪除api(其他明智的你必須使用此路線www.example.com/api/api/controller)。

這樣做,您可以獨立訪問中的兩個項目,其URL爲

對於NInject部分,您可以在MVC項目中再次註冊服務。另一種解決方案(我建議)是製作一個類庫項目並在那裏註冊服務,然後在兩個項目中引用這個類庫

+0

否否否上帝該死。停止使用兩個框架來解決1個問題。 – Phill 2015-04-01 06:40:33

+1

@Phill,有兩個問題。一個是爲移動設備提供後端,另一個是定期顯示信息的網站等。那麼,您的確切建議是什麼? – 2015-04-01 07:11:06

+0

@adricadar,感謝您提供獨立的虛擬應用程序。請參閱此答案:http://stackoverflow.com/a/17023924我正在尋找類似的東西。 – 2015-04-01 07:16:18

1

我喜歡做的是在兩個獨立的項目(separation of concerns)中擁有MVC和WebAPI項目,但讓他們共享相同的業務邏輯。

我喜歡使用命令和查詢模式。因此,所有的命令和查詢都位於另一個解決方案項目中,這是MVC和WebAPI項目都可以訪問的項目。

我部署www.domain.com路徑上的MVC項目,在api.domain.com該項目的WebAPI和的WebAPI的www起源啓用CORS

+0

沒有關注的分離。這是解決1個問題的2個框架。停下來。 – Phill 2015-04-01 06:40:54

+2

我會爭辯說,MVC返回帶有標記的視圖,並且web api返回例如json或xml。然後,API可以獨立於MVC運行。 – janhartmann 2015-04-01 06:54:19

+0

是的,除了vNext正在做本來應該做的事情,並且有一個框架。沒有更多的WebAPI,因爲它不是MVC的一部分。現在它像南希和其他框架一樣正確處理連接。整個分離是愚蠢的,讓很多人感到困惑,例如這個問題和答案。 – Phill 2015-04-01 06:58:31

相關問題