发布Json对象时的400(错误请求)

时间:2016-06-17 12:25:57

标签: c# jquery json ajax stringify

我正在做一个wcf服务电子邮件的帖子请求是我的对象,它具有属性主题和正文。 当我尝试进行ajax调用时,我收到400 Bad Request错误,这是我的代码。我不知道如何在stringify函数中放置一个对象。

{
  "email": {
     "subject": "b",
     "body": "d"
  }
}

 $('#Button1').click(function() {
            var email = {
                subject: $("#Text1").val(),
                body: $("#Text1").val(),

            }

            $.ajax({
                url:"http://localhost:29143/Restwebservice.svc/sendmail",
                type: 'post',
                cache: false,
                contentType: "application/json; charset=utf-8",
                dataType: 'json',

                //data: JSON.stringify(email)
                data: JSON.stringify(email),
                success: function (data) {
                    $('#target').html(data.msg);
                }
            });

2 个答案:

答案 0 :(得分:0)

当json无效时发生错误请求,此处出现此错误是因为您有一个名为"电子邮件"的对象,然后在Button1上点击您正在定义名为' email&#39的新变量;。这里没有引用上一个电子邮件对象,而是在没有" var email"的成员时尝试为其成员分配值。尝试做这样的事情

Object email = new Object();
email.subject =$("#Text1").val();
email.body = $("#Text1").val();

现在将此电子邮件'字符串化。对象,但要确保在服务器端收到与电子邮件相同的对象,因为如果发送和接收对象不匹配则抛出错误的请求。

答案 1 :(得分:0)

你没有向我们展示sendmail方法,但是我假设从ajax调用的数据结构看它应该是这样的:

[DataContract]
public class EmailEntity
{
    [DataMember]
    public string subject { get; set; }
    [DataMember]
    public string body { get; set; }
}

现在sendmail方法看起来像这样

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public void sendmail(EmailEntity emailentity)
{
  ............
}

请注意,请求类型被包装,因此在从ajax发布数据时,您最好首先创建一个emailentity对象作为包装器对象。

var emailentity = {};
emailentity.subject = "Test subject";
emailentity.body = "Test body";

var jsonObj = JSON.stringify(emailentity);
var dataToSend = '{"emailentity":'+jsonObj+'}';

dataToSend现在将通过ajax发布。

$.ajax({
            type: "POST",
            async: false,
            data: dataToSend,
            url: "../path/myService.svc/sendmail",
            contentType: "application/json; charset=utf-8",
            dataType: "json",          
            success: function () {
                alert("success");
            },
            error: function () {
                alert("Error");
            }
        });

希望这有帮助。