2017-01-30 50 views
1

我有一個用C#(http://my.site/)製作的網站,現在我有一個Web API項目,我想合併到該域並在http://my.site/api上進行收聽。他們是VS2013中的兩個獨立項目。主機WebApi和C#網站在同一個域下

我試着上傳的Web API來/api/子文件夾中的服務器和(在WebApiConfig.cs仍然routeTemplate: "api/{controller}/{id}"的WebAPI路線)映射MVC的路線吧,期待默認的(家庭)MVC控制器/api/迴應。 MVC的路線(在的WebAPI的MVC路由):

routes.MapRoute(
     name: "Default", 
     url: "{controller}", //Also api/{controller} 
     defaults: new { controller = "Home", action = "Get", id = UrlParameter.Optional } 
    ); 

,但我得到「服務器錯誤404」訪問http://my.site/api//http://my.site/api/home等。當我不明白這個錯誤在C#網站的性質(最有可能的設置在根文件夾中),但有人會認爲IIS會提供/api/文件夾中的默認應用程序。

所以我想知道如果加入WebApiConfig.Register(GlobalConfiguration.Configuration);Global.asax的Application_Start()),並加入WebApiConfig.csApp_Start的C#項目文件夾(使用相應的命名空間)會解決這個問題。這看起來太簡單了,所以我懷疑它會起作用,所以我需要有人指出我正確的方向,否則我會犯下回到asmx的罪。

如果不是,我如何在同一個域上有C#網站和WebAPI?

+0

您是否期望WebSiteA能夠收聽並響應WebSiteB的請求? –

+0

我有一個WebForms(C#)網站,我想添加我創建的WebAPI。 – Tiago

+3

爲什麼不把你的邏輯放在一個共享的dll中,並將web api庫添加到你現有的web窗體項目中,並根據需要在庫中創建web api控制器實例。這樣,如果您需要,您仍然可以將其作爲獨立解決方案重新部署,但您可以將控制器直接託管在同一個項目中。我們目前這樣做是因爲我們希望在我們的一個傳統項目中使用web api控制器,完全沒有問題。 – Igor

回答

4

您希望在服務器上的同一個bin文件夾中運行兩個獨立的dll(每個dll都有自己的路由規則)。這肯定會在您的網站上導致一些路由衝突。做到這一點的適當方法是將您的api項目託管在單獨的服務器上並使用子域,例如http://api.my.site/。這樣你就可以確保你的C#站點(http://my.site/)可以訪問api(http://api.my.site/)。而你的dll,包括路由規則,將保持獨立。

+0

這似乎是一個合理的建議,但排除了擁有'my.site/api /'url的可能性,這似乎是當今的標準。 – Tiago

+1

通常,如果您在一個解決方案中擁有所有內容,則可以使用「my.site/api」之類的內容。當你有兩個單獨的解決方案時,通常會使用類似'api.my.site'的東西。而'api.my.site'並不罕見。 –

+0

我意識到這是一個搜索引擎優化友好的解決方案,如果在同一個服務器文件夾中運行這兩個項目是不可能的/混亂的,我會使用你的建議(一個在'/ api'中的其他項目) – Tiago

相關問題