发布 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");
}
});
希望对您有所帮助。
我正在执行 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");
}
});
希望对您有所帮助。