2013-08-28 83 views
3

我有兩個獨立的項目網絡API不能訪問

  1. MVC Web應用程序
  2. MVC的Web API 我已經在我的IIS發佈兩個7.5

我Web應用程序託管在7172端口 和Web API託管在7171端口

奇怪iam無法從我的web應用程序(7172)調用jquery.ajax() web api(7171)端口。它給我405方法未找到錯誤代碼。

但是,如果我在我的web api項目(7171)中編寫相同的jquery.ajax()並調用web api方法,那麼它工作正常並返回數據。

我想從我的web應用程序調用web api。

任何建議,將不勝感激。

在此先感謝。

+0

如果您的計劃是消耗MVC應用程序內的API,我寧願將其託管在同一個Web應用程序中,否則您遇到跨站點腳本限制:http://stackoverflow.com/questions/14400710/cross-site-scripting -requirement-makes-my-api-useless –

回答

3

這與Same Origin Policy有關。默認情況下,您不能執行到另一個域(名稱,端口和協議)的AJAX調用。

如果你想啓用它,你應該使用Cross-origin resource sharing (CORS)。 CORS可以通過安裝(prerelase)NuGet包使用Web API:Microsoft ASP.NET Web API Cross-Origin Support

此包允許您配置哪些域可以調用您的服務。你可以在這裏找到一個步行槽Enabling Cross-Origin Requests in ASP.NET Web API。實質上,它歸結爲像這樣向控制器添加屬性:

[EnableCors(origins: "http://myclient.azurewebsites.net", headers: "*", methods: "*")] 
0

您正在運行同源/跨域安全策略。使用的端口是原點計算的一部分。從(例如)localhost:80加載的一點Javascript無法向localhost:8080發出AJAX請求,因爲端口號不匹配。您收到的405錯誤幾乎肯定來自您的Web應用程序,而不是API - 請檢查應用程序的服務器日誌,然後您會看到那裏有ajax。

+0

但是我有一個移動應用程序(客戶端),它將調用我的WebApi來完成功能。在這種情況下,不會面臨同一個跨站點腳本問題。 – shakti