1

当我尝试使用 ajax 从客户端调用 WCF 服务时出现 400 Bad Request 错误。以下是我的代码,

[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json)]
string[] GetUser(string Id);

$.ajax({
                type: "POST", //GET or POST or PUT or DELETE verb
                url: "http://localhost:58055/Service1.svc/GetUser", 
                crossDomain: true,
                data: '{"Id": "3"}',
                contentType: "application/json; charset=utf-8", 
                dataType: "json", //Expected data format from server
                processdata: true, //True or False
                success: function (msg) {//On Successfull service call
                    alert(msg.GetUserResult[0]);
                    console.log("success " + msg);
                },
                error: function (msg) {//On Successfull service call
                    console.log(msg);
                }
            });

任何见解都会非常有帮助......

4

2 回答 2

0

根据ajax api 文档,默认内容类型是“application/x-www-form-urlencoded”。发送 JSON 时,内容类型应为 'application/json; charset=utf-8' 除了 WCF 不喜欢那样。我收到了相同的错误消息,当我删除内容类型时,我不再收到此错误。顺便说一句,我注意到您将 crossDomain 设置为 true,另一个问题与该选项相关。

于 2012-11-28T16:16:33.353 回答
0

您应该尝试的第一件事是使用 fiddler 访问 URL(这样您也可以发布您的数据)并查看是否遇到相同的错误。

您是否正在发出跨域请求。从这个例子看起来你不是。你能删除吗

crossDomain: true,

行并再次尝试jquery。

还有其他不必要的选项,例如 processdata。建议您使用以下代码,看看它是否有效。

$.ajax({
            type: "POST",
        // the url to the service - 
        url: "url",
        // the format that the data should be in when
        // it is returned
        contentType: "json",
            data: '{"Id": "3"}',
        // the function that executes when the server
        // responds to this ajax request successfully
        success: function(data) {

        // put the JSON response in the employees table

        }
于 2012-07-13T06:15:19.510 回答