我有一個包含Web API的ASP.NET MVC 4網站。使用IIS Express作爲Web服務器,在Windows 8上使用Visual Studio 2012和.NET 4.5開發和測試該網站。 在這個開發環境中一切正常。對ASP.NET Web API的所有請求都返回404錯誤
現在,它被部署在IIS 7.5的Windows 2008 R2(SP1)服務器上。 .NET 4.0和4.5已安裝。應用程序池在集成管道模式下與.NET 4.0一起運行。
在這個生產環境下,MVC網站的工作原理是,Web API沒有。對於每個請求,無論GET還是POST,我都會收到404錯誤。如果我只是在瀏覽器(在服務器本地打開IE 9)中輸入一個Web API Url來運行一個GET請求,我會得到一個404頁面。如果我發出了從Web API客戶端應用程序POST請求,我收到了404,以及與消息:
我創建了一個
沒有HTTP資源發現,請求匹配URI使用MVC 4和Web API測試網站,並將其部署在同一臺服務器上,並且Web API可以工作。 Web API和MVC程序集在兩個項目中都具有相同的版本號。
此外,我已將Web API Route Debugger添加到應用程序中。如果我使用一個有效的路由像
http://myserver/api/order/12
我得到以下結果:對於我來說,這意味着正確的路由模板
Api/{Controller}/{Id}
已發現並正確地解析爲控制器Order
和Id=12
。控制器(來自ApiController
)存在於所有MVC控制器所在的Web組件中。不過,我不知道是什麼狀態
000
可能意味着以及爲什麼沒有顯示「路徑選擇」一節(這通常是這種情況,即使集不包含單ApiController
是,見截圖上面的鏈接頁面)。不知何故,它看起來像沒有找到ApiController
甚至沒有搜索或搜索失敗的默默。IIS日誌文件沒有顯示任何有用的信息。更改各種應用程序池設置並使用相同的應用程序池進行測試和實際應用程序並沒有幫助。
我目前正在從應用程序中刪除「功能」,配置設置,第三方程序集等,以最終將其縮小到測試應用程序的小尺寸,並希望在某些時候它開始工作。
有人知道問題可能是什麼嗎?另外任何調試或記錄的想法可能找到原因是非常受歡迎的。
編輯
由於達雷爾 - 米勒在我下面的評論尖端集成了Tracing for ASP.NET Web Api。
對於(GET)請求URL
http://myserver/api/order/12
我得到如下:
- 在開發環境中,成功的(縮略形式):
消息:
http://localhost:50020/api/order/12
;類別: System.Web.Http.Request控制器的選擇和實例...
運營商:DefaultHttpControllerSelector;操作:SelectController; 消息:Route =「controller:order,id:12」;類別: System.Web.Http.Controllers
運算符:DefaultHttpControllerSelector;操作:SelectController; 消息:訂購;類別:System.Web.Http.Controllers
運算符:HttpControllerDescriptor;操作:CreateController; 消息:;類別:System.Web.Http.Controllers
運算符:DefaultHttpControllerActivator;操作:創建;訊息: ;類別:System.Web.Http.Controllers
運算符:DefaultHttpControllerActivator;操作:創建;消息: MyApplication.ApiControllers.OrderController;類別: System.Web.Http.Controllers
行動選擇,參數綁定和調用動作如下...
內容協商和格式結果...
運營商:DefaultContentNegotiator ;操作:協商;消息:典型值= 「字符串」 ... 更多
處置控制器...
運營商:OrderController;操作:處理;信息: ;分類: System.Web.Http.Controllers
- 在生產環境中,未成功(在短形式):
消息:
http://myserver/api/order/12
;類別: System.Web.Http.Request運算符:DefaultHttpControllerSelector;操作:SelectController; 消息:Route =「controller:order,id:12」;分類: System.Web.Http。控制器
控制器激活,動作選擇,參數綁定,調用行動失蹤,它遵循內容 談判,並立即格式化的錯誤消息的整個部分:
運營商:DefaultContentNegotiator;操作:協商;消息: TYPE =「HttpError」 ... 更多
您可能需要激活服務器角色>互聯網信息服務>萬維網服務一些IIS功能。 我不知道你需要激活什麼,但我認爲你的問題可以在這裏! –
嘗試打開網頁API跟蹤http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api –
看起來像你的WebAPI未註冊。你的'Global.asax'和'WebApiConfig'是怎麼回事?它們內部是否有條件配置? – Liel