jQuery .ajax() POST 请求在 RESTful WCF 上抛出 405(方法不允许)

标签 jquery web-services rest post wcf-rest

我正在向 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。

任何有关此错误发生原因的帮助都会有很大帮助。

最佳答案

您的代码实际上是在尝试创建 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 页面位于同一域时的方式完全相同)。
    • 如果预期的 header 没有出现,浏览器就会放弃(就像它对您所做的那样)。

如何解决?最简单的方法是在服务器上启用 CORS(启用必要的 header )。

如果您没有服务器端访问权限,您可以从其他地方镜像 Web 服务,然后在那里启用 CORS。

关于jQuery .ajax() POST 请求在 RESTful WCF 上抛出 405(方法不允许),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333013/

相关文章:

.net - 使用 .NET 3.5 创建什么? Web 服务或 Windows 服务

javascript - 如何在 jhipster 中管理来自自定义 REST 的 .json 响应数据

python - 使用 Flask Rest API 上传和处理文件

javascript - For循环忽略延迟(300)

javascript - html 方法在传递 false 时不输出 "false"

java - WebService 上的 JOptionPane

java - 发布 Web 服务时出错

javascript - jquery中如何检测按钮是否折叠?

javascript - JQuery 在调整窗口大小时重新计算 css

rest - 测试 Neo4j 托管扩展