代码之家  ›  专栏  ›  技术社区  ›  Tiisetso Tjabane

将对象集合发布到Web API控制器

  •  0
  • Tiisetso Tjabane  · 技术社区  · 7 年前

    我正在尝试使用jquery向web api控制器发送一个http post,我正在向控制器发送一个对象数组,但是当到达服务器时,数组是空的。

    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)
            })
    

    发布数据

    enter image description here

    控制器

        [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; }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Tiisetso Tjabane    7 年前

    这就是我的工作。

    javascript

            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"] = parseInt($("#ActuaryId").val());
                courseAttended.push(course);
            });
    
            $.ajax({
                url: "api/actuary/" + $("#ActuaryId").val() + "/documents/",
                cache: false,
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify(courseAttended),
                dataType: "json",
                success: function (data) {
                    console.log(data)
                }
            })
    

    控制器:

        [Route("api/actuary/{actuaryId:long}/documents/")]
        [HttpPost]
        public async Task<IHttpActionResult> 
        uploadCourseTrainingProofAsync(List<CourseModel> courseAttended)
        {
         //.....
        }
    

    我更感兴趣的是为什么在ajax请求中指定了其余的细节。

    谢谢你的建议。

        2
  •  0
  •   R.Sarkar    7 年前

    您已经为请求指定了内容类型。对于您的案例json。此外,您还必须在模型类中将精算类型int更改为string。下面是工作代码。

     $.ajax({
            type: "POST",
            contentType: 'application/json',
            url: "api/url",
            data: JSON.stringify(courseAttended),
            success:  (response)=> {
                console.log(response);
            },
            error: (response) =>{
                console.log(response);
            }
        });
    
    public class CourseModel
    {
        public string ActuaryId { get; set; }
    
        public string Title { get; set; }
    
        public bool IsDone { get; set; }
    }