3

我有两个独立的项目

  1. MVC 网络应用程序
  2. MVC Web API 我已经在我的 IIS 7.5 上发布了

我的 Web 应用程序托管在 7172 端口上,而 Web API 托管在 7171 端口上

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

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

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

任何建议将不胜感激。

提前致谢。

4

2 回答 2

3

与同源策略有关。默认情况下,您不能对另一个域(包括名称、端口和协议)执行 AJAX 调用。

如果要启用此功能,则应使用跨域资源共享 (CORS)。通过安装(预发布)NuGet 包,CORS 可以与 Web API 一起使用:Microsoft ASP.NET Web API Cross-Origin Support

这个包允许你配置哪些域可以调用你的服务。您可以在此处找到在 ASP.NET Web API 中启用跨域请求的介绍。本质上,它归结为向控制器添加属性,如下所示:

 [EnableCors(origins: "http://myclient.azurewebsites.net", headers: "*", methods: "*")]
于 2013-08-28T14:34:04.777 回答
0

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

于 2013-08-28T14:35:00.847 回答