无法访问IIS上另一个端口上托管的Web Api

时间:2013-08-28 14:30:44

标签: asp.net-mvc-4 asp.net-web-api

我有两个独立的项目

  1. MVC Web App
  2. MVC Web API 我已经在我的IIS 7.5上发布了
  3. 我的网络应用程序托管在7172端口上 和Web API托管在7171端口

    奇怪的是,我无法从我的网络应用程序(7172)调用jquery.ajax()到web api(7171)端口。它给了我405 Method not found错误代码。

    但是如果我在我的web api项目(7171)中编写相同的jquery.ajax()并调用web api方法,那么它可以正常工作并返回数据。

    我想从我的网络应用程序调用web api。

    任何建议都将不胜感激。

    提前致谢。

2 个答案:

答案 0 :(得分:3)

这与Same Origin Policy有关。默认情况下,您无法对另一个域(名称,端口和协议)执行AJAX调用。

如果要启用此功能,则应使用Cross-origin resource sharing (CORS)。通过安装(earlylase)NuGet包,可以将CORS与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: "*")]

答案 1 :(得分:0)

您正在遇到同源/跨域安全策略。使用的端口是原点计算的一部分。从(例如)localhost:80加载的一些Javascript无法向localhost:8080发出AJAX请求,因为端口号不匹配。您获得的405错误几乎肯定来自您的Web应用程序,而不是API - 检查应用程序的服务器日志,您将看到那里的ajax命中。