JSON 数组作为空值发送到控制器

JSON Array Sends As Null To Controller

我似乎无法在 Whosebug 的其他地方找到答案,所以我现在问一下。

我正在尝试在我的 API 中测试更新后的 PUT,以便从 Wordpress 站点向我们的数据库提交答案数据。 API 作为 WP 和 SQL 之间的中介。

我的class:

[DataContract]
public class WordpressAnswerEntry
{
    /// <summary>
    /// Gets or sets the ID of the question the user is submitting an answer for
    /// </summary>
    [DataMember]
    public string QuestionID { get; set; }

    /// <summary>
    /// Gets or sets the data they're submitting
    /// </summary>
    [DataMember]
    public string AnswerData { get; set; }
}

简单易行。我试过使用 int QuestionID 和 string

我的方法:

    [AcceptVerbs("PUT")]
    [Route("api/Questions/{applicationID}/{groupID}")]
    public HttpResponseMessage Put([FromBody] IEnumerable<WordpressAnswerEntry> answerlist, int applicationID = 0, int groupID = 0)

同样,没什么特别的。我已经尝试将其作为列表和自定义集合 class。 IEnumerable 是我最后一次尝试。

我在 API 中有一个索引页,用于提交测试并查看 return 编辑的 JSON。下面是我的测试用例:

        $("#TestQuestionsWithAnswersButton").click(function (e) {
            e.preventDefault();

            var answerEntries = {
                answers:
                [
                    { QuestionID: "14",
                     AnswerData: "first name" },
                    { QuestionID: "15",
                     AnswerData: "last name" },
                    { QuestionID: "16",
                     AnswerData: "email here" },
                     { QuestionID: "25",
                        AnswerData: "12"
                    },
                ]
            }

            var answerlist = {
                answers: answerEntries
            };


            $.ajax({
                type: "PUT",
                url: "api/Questions/0/96",
                data: JSON.stringify(answerlist),
                contentType: "application/json; charset-utf-8",
                dataType: "json",
                success: function (data) {
                    $("#ResponseDiv").html(JSON.stringify(data));
                },
                failure: function (errMsg) {
                    alert(errMsg);
                }
            });
        });

我已经尝试了一切来让它工作。我试过使用和不使用封装 "answerList"。我尝试过使用和不使用 stringfy。我尝试过使用和不使用 {answerlist : answerEntries} 以及使用或不使用 stringfy。我试过使用和不使用 [DataMember] 和 [DataContract]。我设置了内容类型。我有类型设置。我不知道还能做什么。

每个测试 return 的答案列表都是空的,每次都没有失败。我不知道现在该怎么办。在我确认它有效之前我无法发布它,但我无法确认它,因为它根本行不通。我可以告诉它正确的路由,因为我的断点被击中(我得到一个 400,当答案为空时我 return 是故意的),但由于某种原因我无法得到这个 JSON 数组转换。

正如评论中多次提到的那样,

发送的数据与控制器操作预期的数据类型不匹配。

更新从客户端发送到...

var answerList =  [
    { QuestionID: "14",
     AnswerData: "first name" },
    { QuestionID: "15",
     AnswerData: "last name" },
    { QuestionID: "16",
     AnswerData: "email here" },
     { QuestionID: "25",
        AnswerData: "12"
    },
];

ajax 调用可以保持不变,因为数据是以正确的格式发送的

与其将数组添加到一个对象,然后将该对象添加到另一个对象,不如通过以下方式发送字符串化数组:

         var  answers =
            [
                { QuestionID: "14",
                 AnswerData: "first name" },
                { QuestionID: "15",
                 AnswerData: "last name" },
                { QuestionID: "16",
                 AnswerData: "email here" },
                 { QuestionID: "25",
                    AnswerData: "12"
                }
            ];

然后在你的 ajax:

data: JSON.stringify(answers)