2014-05-14 136 views
0

我正在開發一個RESTful web api服務。這是網絡api v.1,而不是v.2。另外我正在開發Visual Studio 2010 SP1。我已經安裝了VS2010 SP1的MVC 4。未找到「根」路徑的Web API 404文件或目錄

請理解並記住,升級到VS或Web Api 2的較新版本不是一種選擇。

在Windows更新發生後,我有以下問題

當我嘗試使用我的RESTful API,這樣....

http://url.com/documents/(得到所有的文件),我收到以下錯誤...

的資源不能被發現。

描述: HTTP 404.您正在查找的資源(或其某個依賴項)可能已被刪除,名稱已更改或暫時不可用。  請檢查以下URL並確保拼寫正確。

這是堆棧跟蹤。

[HttpException]: File does not exist. at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response) at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context, String overrideVirtualPath) at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) at system.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

如果我直接指定動作的名稱,它的工作原理。例如...

http://url.com/documents/get(得到所有的文檔)或

http://url.com/documents/7(獲取文檔ID = 7。

只有當你通過它的默認名稱稱呼它失敗。我已經看過類似這裏的情況和我曾試圖按照他們的解決方案,但它們都不能正常工作對我來說。

現在,我知道這不是「網絡API的路由」的問題,因爲我實際上得到了.NET默認異常頁面的html標記(我正在使用郵差來測試我的網絡服務)。當我強制「路由問題」時,我得到一個JSON錯誤描述,這意味着Controller實際上已經在管道中創建並返回響應。

此外,我有一個從DelegatingHandler繼承的自定義文件(SecurityHandler)。每次調用api時,該文件幾乎在管道中首先執行。甚至在實際的控制器之前。那麼,當我得到這個錯誤時,這個文件永遠不會被調用,這證實了我的「web服務器」(VS開發服務器或IIS 7)是拋出異常的那個。

我已經用盡了我在這裏找到的每一個解決方案。將我的web.config更改爲多個處理程序配置,爲VS2010重新安裝MVC 4,創建了一個全新的項目...所有這些努力都沒有顯示任何結果。

就像我說的,這是工作完全正常,直到我的電腦從Windows Update重新啓動但是...爲什麼它在服務器也失敗了?錯誤開始發生後,我確實將api部署到了服務器。

謝謝。

回答

0

該問題不在Web API中(並且與其版本或Visual Studio 2010無關),它是試圖服務和失敗的靜態文件處理程序。

替代品: 0.您的網站是否有文檔文件夾?擺脫它。 1.刪除目錄瀏覽的靜態文件處理程序並重新添加它。 2.使用RAMMFAR(不太推薦)

+0

Yishai,好像是一個「路由順序問題」。無法理解它以前是如何工作的(我認爲這是你自己幫助我首先得到它),但後來它打破了。我將路由映射器從最具體的路由映射器切換到較少的路由映射器,並再次運行。謝謝 –