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)
我似乎无法在 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)