我有两个独立的项目
我的网络应用程序托管在7172端口上 和Web API托管在7171端口
奇怪的是,我无法从我的网络应用程序(7172)调用jquery.ajax()到web api(7171)端口。它给了我405 Method not found错误代码。
但是如果我在我的web api项目(7171)中编写相同的jquery.ajax()并调用web api方法,那么它可以正常工作并返回数据。
我想从我的网络应用程序调用web api。
任何建议都将不胜感激。
提前致谢。
答案 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命中。