11

ここで詳細に何かが欠けていることを知っています。

問題

グーグル、例、さまざまな形式などを試しても、送信するAJAXリクエストは常にすべてのフィールドが空であると検証されますが、nullではありません。

コントローラーがオブジェクトとして認識できるように適切な形式で送信していないと思いますが、何がわからないのですか。

Fiddler: 私のリクエストはどのように見えるか

いくつかのダミーデータを使用:

ここに画像の説明を入力

コード: モデル クラス

public class ContactUsMessage
{
    public string Email { get; set; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
    public string Message { get; set; }
}

コード: WebAPI コントローラー

    [HttpPost]
    public HttpResponseMessage NewMessage(ContactUsMessage messageToSend)
    {
        if (messageToSend == null)
        {
            var sadResponse = Request.CreateResponse(HttpStatusCode.BadRequest, "Empty Request");
            return sadResponse;
        }

        var messageValidator = new ContactUsMessageValidator();
        var results = messageValidator.Validate(messageToSend);
        var failures = results.Errors;
        var sadString = "";
        if (!results.IsValid)
        {
            foreach (var error in failures)
            {
                sadString += " Problem: " + error.ErrorMessage;
            }
            var sadResponse = Request.CreateResponse(HttpStatusCode.NotAcceptable, "Model is invalid." + sadString);
            return sadResponse;

        }
        else
        {
            SendContactFormEmail(messageToSend.Email, messageToSend.Name, messageToSend.PhoneNumber, messageToSend.Message);

        }

コード: ページ上の JavaScript

function sendSubmissionForm() {

    var dataObject = JSON.stringify(
        {
            messageToSend: {
                'Email': $('#inpEmail').val(),
                'Name': $('#inpName').val(),
                'PhoneNumber': $('#inpPhone').val(),
                'Message': $('#inpMessage').val()
            }
        });

    $.ajax({
        url: '/api/contactus/newmessage',
        type: 'POST',
        done: submissionSucceeded,
        fail: submissionFailed,
        data: dataObject

    });


}
4

1 に答える 1

45

データ オブジェクトを JSON.stringify すると、JSON に変換されます。しかし、Content-Type 要求ヘッダーを設定するのを忘れており、Web API は、JSON、XML、またはその他のものを送信しているかどうかを知る方法がありません。

$.ajax({
    url: '/api/contactus/newmessage',
    type: 'POST',
    contentType: 'application/json',
    done: submissionSucceeded,
    fail: submissionFailed,
    data: dataObject
});

また、JSON を作成するときに、メソッドの引数名と一致する追加のプロパティでラップする必要はありません。以下も同様に機能するはずです。

var dataObject = JSON.stringify({
    'Email': $('#inpEmail').val(),
    'Name': $('#inpName').val(),
    'PhoneNumber': $('#inpPhone').val(),
    'Message': $('#inpMessage').val()
});
于 2013-07-21T04:27:42.213 に答える