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

400(Bad Request) when a Json object is posted

我正在执行 post 请求 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);
                }
            });

当 json 无效时出现错误请求,此错误是因为您有一个名为 "email" 的对象,然后在 Button1 上单击您正在定义名为 [=17= 的新变量].这里不是引用以前的电子邮件对象,而是创建新变量并在 "var email" 没有成员时尝试为其成员分配值。尝试做这样的事情

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

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

您没有向我们展示 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");
            }
        });

希望对您有所帮助。