2013-08-28 50 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