我正在向RESTFUL WCF服务应用程序发送发布请求。我能够通过Fiddler成功发送POST
请求。
但是,当我通过jQuery AJAX 方法执行此操作时,该函数会向Chrome开发者控制台返回以下内容:
OPTIONS http://www.example.com/testservice/service1.svc/GetData 405 (Method Not Allowed) jquery.min.js:6
但在日志之后的一秒钟:
Object {d: "You entered 10"} testpost.html:16
这告诉我jQuery正在发送一个失败的**OPTIONS
**请求,然后发送一个返回预期数据的POST
请求。
我的jQuery代码:
$.ajax() {
type: "POST", //GET or POST or PUT or DELETE verb
url: "http://www.example.com/testservice/service1.svc/GetData", // Location of the service
data: '{"value":"10"}', //Data sent to server
contentType:"application/json",
dataType: "json", //Expected data format from server
processdata: false,
success: function (msg) {//On Successfull service call
console.log(msg);
},
error: function (xhr) { console.log(xhr.responseText); } // When Service call fails
});
我使用的是jQuery 2.0.2版。
任何有关此错误发生原因的帮助都将是很大的帮助。
6条答案
按热度按时间ar5n3qh51#
您的代码实际上尝试发出Cross-domain (CORS)请求,而不是普通的
POST
。也就是说:现代浏览器将只允许 AJAX 调用与HTML页面相同域中的服务。
示例:
http://www.example.com/myPage.html
中的页面只能直接请求http://www.example.com
中的服务,如http://www.example.com/testservice/etc
。如果服务在其他域中,浏览器将不会直接调用(如您所期望的)。而是尝试发出CORS请求。简言之,要执行CORS请求,您的浏览器:
OPTION
请求OPTION
的响应包含adequate headers (Access-Control-Allow-Origin
is one of them)以允许CORS请求时,浏览才会执行调用(几乎与HTML页面位于同一域时的方式完全相同)。**如何解决?**最简单的方法是在服务器上启用CORS(启用必要的头)。
如果您无法在服务器端访问它,则可以从其他位置镜像Web服务,然后在那里启用CORS。
bbuxkriu2#
您必须在global.aspx中添加以下代码:
9jyewag03#
您也可以在过滤器中创建所需的标头。
anauzrmj4#
这对我很有效
在Web.config中添加以下脚本
另请参见路由配置.cs
变更
设置。自动重定向模式=重定向模式。永久;
至
设置。自动重定向模式=重定向模式。关闭;
希望对你或某人有帮助:)
cidc1ykv5#
对于相同的错误代码,我有相当不同的原因,我在这里分享,以帮助
我有如下的web API操作
我更改了方法以接受两个参数category和author,因此我将参数更改如下,我还将属性[Httppost]
我还改变 AJAX 选项,如下面,在这一点上,我开始得到错误405方法不允许
当我为Web API操作参数创建类时,如下错误消失了
7dl7o3gd6#
对于VScode用户-您是否通过vs code使用live-server?正常访问:)
jQuery . AJAX ()不适用于-
它在里面工作!!-