使用jquery 1.7.1进行$ .post调用到WCF休息服务

时间:2012-01-11 21:06:47

标签: c# jquery wcf rest post

所以我有以下工作:

$.ajax({
    type: 'POST',
    url: 'user',
    data: '{"FirstName":"John","LastName":"Doe"}',
    contentType: "application/json",
    dataType: 'json',
    success: function (data) {
        alert('success!' + data.Id);
    }
});

然而这失败了(应该是等价的):

$.post('user', '{"FirstName":"John","LastName":"Doe"}');

知道什么是错的吗? $ .post是否与WCF休息不相容?

1 个答案:

答案 0 :(得分:2)

不,两者根本不相同。查看FireBug,Fiddler,...并比较2个请求。在第二个示例中,您未设置contentType: "application/json"请求标头。您没有设置它,因为$.post方法不允许您这样做。

服务器不接受您的请求,因为您尝试POST到启用JSON的服务,它希望请求是JSON,当然客户端设置application/json内容类型请求标头。您正在发布一些字符串,因为您没有通过内容类型标题指明此字符串表示的内容,服务器不知道如何处理它并删除请求。

这就是说您应该像第一个示例中那样使用$.ajax来调用您的服务。实际上我建议你稍作修改,而不是:

data: '{"FirstName":"John","LastName":"Doe"}',

使用:

data: JSON.stringify({"FirstName":"John","LastName":"Doe"}),

这将确保如果明天您决定与Mr. Jon Doe之外的其他人打交道,例如Mr. Jon O"Hara,那么您的JSON仍然会被正确编码,这就是JSON.stringify方法所做的。它本身内置于现代浏览器中,但如果您需要支持某些旧版浏览器,则可以包含json2.js脚本来启用它。