2014-05-02 73 views
9

我開發了一個新的WEB API 2,它在本地很好地工作,但是當我將相同的代碼上傳到我的生產服務器(本例中爲Arvixe)時,當我打電話時get是一個404。我花了幾個小時在網上搜索,閱讀論壇等,但都找不到解決辦法,所以我在這裏問我作爲我最後的努力。ASP.NET WEB API 2在本地工作,但不是在生產Web服務器

我目前只使用默認項目進行測試,當您執行此操作時在Visual Studio中新建項目> ASP.NET Web API 2空項目。這創建了一個空的項目,其中包含一個ValuesController。您應該能夠通過稱爲/api/values的JSON響應,但這甚至不起作用。

我正在使用Fiddler在本地和Web服務器上測試API。

http://localhost:1993/api/values <--- works great 

http://api.mydomain.com/api/values <--- returns 404 

注:我創造了在這種情況下的子域「API」,但一切對於API的代碼是創建時從不變。

爲什麼在這個世界上,這是在本地工作,而不是在生產Web服務器上?

+0

檢查是否部署了所有dll,並將該網站設置爲.NET 4.5.1應用程序池中的應用程序。 –

+0

所有的DLL都在那裏,它在ASP.NET 4.0 Integrated下運行,但.NET 4.5.1在服務器上安裝並運行。我真的不明白爲什麼這不應該起作用。 – Cory

+0

你的應用程序的根目錄是什麼?是否在遠程服務器上顯示默認頁面? – Uriil

回答

1

服務器返回404(未找到)可能表明很多事情。但是,您可以檢查使用以下步驟:

  1. 像readme.txt文件添加一個簡單的文本文件到您的文件夾的子域http://api.mydomain.com,並試圖讓訪問了這一點。如果您無法訪問該文件,則表示該子域未正確配置。

  2. 使用「發佈」功能發佈web服務,以便複製所有DLL。

之後,嘗試再次訪問WebAPI。

希望有所幫助。

0

「注意:在這種情況下,我創建了一個子域'api',但API的代碼的所有內容都與創建時的一樣。」

您的上述評論可疑,您應該在根目錄下發布您的WEB API應用程序。如果http://example.com指向「MyExample」文件夾,則應將應用程序發佈到「MyExample」文件夾中。 之後,你就可以訪問你的API與http://example.com/api/ {控制器}/{行動}

-1

原因之一網頁API 2方法工作的本地機器上確定的,但不是生產服務器上,你所呼叫的方法是工作本地機器,但不在遠程服務器上。在這種情況下,您將收到消息404或500,並且您將丟失爲什麼此路由失敗。 爲什麼一個方法在遠程服務器上失敗,可能有很多原因。對我而言,我在我的方法中查詢數據庫,並且沒有爲遠程服務器設置connectionString。 解決這個問題的一種方法是在該特定方法中添加一些非常簡單的代碼並測試路由是否正常工作。然後檢查您的原始代碼是否有錯誤原因。

+0

我在我的項目中廣泛使用web api2,並且我分享了我的個人經驗以幫助每個人(因爲我得到了很多人的幫助)。 – Zeni

+0

我在我的項目中廣泛使用web api2,並且我分享了我的個人經驗來幫助每個人(因爲我得到了其他人的大量幫助)。錯誤404和500不會告訴您路由正常,但方法發生錯誤。這可能會讓很多人感到困惑,因爲他們可能會認爲路由/路徑有問題。對於我的這種努力,我會降低評級,這對我來說是非常令人驚訝的。我很想知道下面評價這個回覆的偉大專家的理由。他必須有勇氣挺身而出,以他的智慧啓迪我。我在等待....... – Zeni

0

只是一個簡單的建議,我相信你已經考慮過了,但是你打開了服務器防火牆上的http端口80嗎?

還在項目的根目錄中粘貼一個普通的舊html文件,並查看服務器是否提供了它。

+0

由於404是一個Web服務器錯誤,如果Web服務器端口已關閉,則不太可能會返回該錯誤。 –

0

你的情況,因爲在創建「API」的子域,你應該嘗試

http://api.mydomain.com/api/api/values 

請注意,如果你正在使用的數據庫的功能,你應該改變的connectionString在你的web配置

0

請驗證您的託管域上可能是舊的.net框架。

  • Web api 2應該是4.5框架。
相關問題