400(неверный запрос) при публикации объекта Json

Я делаю почтовый запрос для электронной почты службы wcf - это мой объект, имеющий атрибуты subject и body. Когда я пытаюсь сделать 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 ответа

Решение

Вы не показали нам 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");
            }
        });

Надеюсь это поможет.

Плохой запрос возникает, когда json является недопустимым, здесь эта ошибка связана с тем, что у вас там есть объект под названием "электронная почта", а затем при нажатии кнопки 1 вы определяете новую переменную с именем "электронная почта". Здесь вместо того, чтобы ссылаться на предыдущий объект электронной почты, вы создаете новую переменную и пытаетесь присвоить значения ее членам, когда нет члена для "var email". попробуйте сделать что-то вроде этого

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

А теперь зафиксируйте этот объект 'email', но убедитесь, что на стороне сервера вы получаете тот же объект, что и электронная почта, потому что, если отправка и получение объектов не совпадают, это вызывает неверный запрос.

Другие вопросы по тегам