Jquery Rest 与 WCF 3.5 的通信

Posted

技术标签:

【中文标题】Jquery Rest 与 WCF 3.5 的通信【英文标题】:Jquery Rest communication with WCF 3.5 【发布时间】:2010-09-23 23:04:52 【问题描述】:

我正在测试在 asp.net mvc 站点和 WCF 3.5 服务之间交换休息消息的基础知识。 该服务是使用 codeplex 上的 WCF REST Starter Kit 中的模板构建的。 我想使用 jquery 交换 json 消息。 REST Singleton 服务工作正常,它还提供了所有可能调用的示例,将帮助参数添加到 uri 的末尾。 我到达后使用内置的 jquery $.getJSON 执行 GET 请求。 我在执行 PUT(用于更新值)和 POST 时遇到问题。

$.ajax(
     type: "PUT",
     dataType: "json",
     url: "http://localhost:1045/Service.svc/?format=json",
     data: '"Value":testvalue'
 ); 

对此最好的方法是什么?有没有可能根本不使用Ajax女士,绕过它是否正确?

【问题讨论】:

【参考方案1】:

还要确保在 ajax 调用中正确设置了 contentType

contentType: "application/json"

JQuery 默认是

contentType: "application/x-www-form-urlencoded"

【讨论】:

【参考方案2】:

根据jQuery,并非所有浏览器都支持“PUT”和“DELETE”

要发出的请求类型(“POST”或 “GET”),默认为“GET”。注:其他 HTTP 请求方法,例如 PUT 和 DELETE,这里也可以用,但是 并非所有人都支持 浏览器。

http://docs.jquery.com/Ajax/jQuery.ajax#options

虽然我并没有真正理解你的问题。您在执行 PUT 和 POST 或只是 POST 时遇到问题? GET 工作正常吗?

我注意到的一个错误是您的数据,请注意我添加的数据没有引号。

$.ajax(
     type: "PUT",
     dataType: "json",
     url: "http://localhost:1045/Service.svc/?format=json",
     data:  Value: "testvalue" 
);

【讨论】:

嗨,尼克,感谢您更正示例。为了澄清我的 POST 和 PUT 也使用正确的代码,这两种方法都返回 ParseError...【参考方案3】:

并非所有服务器都启用 PUT 和 DELETE 动词。您需要将这些动词放在 X-HTTP-Method-Override 标头中。 valeu 取自标头,并在处理请求之前替换正常的 POST jsut。

jQuery jREST 插件可以帮助您解决这个问题。如果您使用的是 WCF,您还需要实现一个 RequestInterceptor(搜索 XHttpMethodOverrideInterceptor 以获取 mroe 详细信息)。

【讨论】:

以上是关于Jquery Rest 与 WCF 3.5 的通信的主要内容,如果未能解决你的问题,请参考以下文章