Amazon EC2 實例上沒有 Web API 控制器
我有一個在 Windows Server 2008 R2(數據中心版)上的 IIS 7 上執行並使用 Visual Studio 2010 建構的 Web 應用程序。當我將網站項目部署到本地 IIS 伺服器或託管在託管服務的 VPS 上的生產 IIS 伺服器時,API可以通過 訪問控制器
/api/notifications/
,這是通過來自網頁的 AJAX 呼叫完成的。問題是,在 Amazon EC2 實例上的相同設置上,所有 API 控制器都不起作用,它們都會導致 404 not found 響應。我檢查了是否到處都安裝了相同版本的 .NET 框架,IIS 執行相同的處理程序映射、模組、ISAPI 過濾器、請求過濾和 ASP 設置都是相同的。在 EC2 實例上執行請求跟踪失敗,並且沒有出現與 asp 相關的錯誤。一切都是最新的。我嘗試添加:<modules runAllManagedModulesForAllRequests="true" />
並嘗試添加:
<handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers>
到 web.config 文件中的適當位置,仍然沒有 api 控制器。通常,該網站被部署到“wwwroot”文件夾,其他一切正常,所以我還嘗試通過創建應用程序部署到虛擬目錄並訪問
/Test/api/notifications/
仍然會導致 404(雖然我可以訪問網站的其餘部分/Test/
)。我嘗試通過這篇文章重新註冊框架:http ://www.aheil.de/2012/11/05/fixing-asp-net-mvc-4-web-api-404/
我確保在 IIS 配置中選中了“允許未列出的文件副檔名”。
任何想法為什麼這不適用於 EC2 實例?
問題是 .NET Framework 4.5 安裝在所有開發機器上,但沒有安裝在 Amazon EC2 Windows Server 2008 R2 伺服器上。安裝 .NET 4.5 顯然也更新了舊的 4.0 程序集(特別是,我懷疑 System.Net.Http 和 System.Web.Http),並且因為 webapp 是針對這些 4.0 程序集的 4.5 版本建構的,所以 Web API 控制器不會部署在 EC2 伺服器上時進行初始化。
解決方案:確保 EC2 伺服器上的框架程序集與開發機器上的框架程序集相同:
- 在 EC2 伺服器上安裝 .NET 4.5
- 在開發機器上解除安裝 .NET 4.5。
這個 MSDN 執行緒中還有很多有用的資訊