【发布时间】:2019-03-26 05:08:50
【问题描述】:
我正在尝试使用 jquery 向 Web API 控制器发布 http 帖子,我正在向控制器发布一组对象,但是当到达服务器时,该数组为空。
javascript
var url = "api/actuary/" + $("#ActuaryId").val() + "/documents/";
var inputs = $("#proofOfTraining input[type='checkbox']");
var courseAttended = []
inputs.each(function (ind, val) {
var course = {};
course["IsDone"] = $(val).is(":checked");
course["Title"] = $(val).attr("name");
course["ActuaryId"] = $("#ActuaryId").val();
courseAttended.push(course);
});
console.log(courseAttended)
$.post(url, JSON.stringify({ courseAttended }), function (response) {
console.log(response)
})
发布数据
控制器
[Route("api/actuary/{actuaryId:long}/documents/")]
[HttpPost]
public async Task<IHttpActionResult> uploadCourseTrainingProofAsync(List<CourseModel> courseAttended)
{
try
{
using (Data.ADPDB db = new Data.ADPDB())
{
foreach (CourseModel course in courseAttended)
{
var tempDoc = new documents();
tempDoc.ActuaryId = course.ActuaryId;
tempDoc.Document = null;
tempDoc.DocumentTypeId = -1;
tempDoc.Done = course.IsDone;
tempDoc.Title = course.Title;
db.documents.Add(tempDoc);
}
await db.SaveChangesAsync();
}
return Ok();
}
catch (Exception ex) {
return InternalServerError(ex.InnerException);
}
}
型号
public class CourseModel
{
public int ActuaryId { get; set; }
public string Title { get; set; }
public bool IsDone { get; set; }
}
【问题讨论】:
-
我们可以看到你传递的对象数组吗?如果你使用的是 post 那么为什么不在 body 中传递 actuaryId 呢?
-
JSON.stringify({ courseAttended: courseAttended }) -
尝试只发布 JSON.stringify(courseAttended);这看起来像您正在向控制器发送一个对象,而不是一个数组。
-
尝试使用 JSON.stringify( courseAttended )
-
感谢 RoryMcCrossan。 @TiisetsoTjabane 你也可以检查这个问题,它有一些很好的答案:stackoverflow.com/questions/13242414/…
标签: c# jquery asp.net-web-api model-view-controller http-post