Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象集合发布到Web Api控制器_C#_Jquery_Asp.net Web Api_Model View Controller_Http Post - Fatal编程技术网

C# 将对象集合发布到Web Api控制器

C# 将对象集合发布到Web Api控制器,c#,jquery,asp.net-web-api,model-view-controller,http-post,C#,Jquery,Asp.net Web Api,Model View Controller,Http Post,我正在尝试使用jquery向Web API控制器发送http post,我正在向控制器发送一个对象数组,但当它到达服务器时,该数组为空 javascript var url = "api/actuary/" + $("#ActuaryId").val() + "/documents/"; var inputs = $("#proofOfTraining input[type='checkbox']"); var courseAttended = [

我正在尝试使用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)
        })
发布数据

控制器

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

这就是我的工作

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)
    {
     //.....
    }
[路径(“api/精算师/{精算师ID:long}/documents/”)
[HttpPost]
公共异步任务
上传CourseTrainingProofAsync(列出CourseTrainingProofAsync)
{
//.....
}
我更感兴趣的是为什么我要在ajax请求中指定其余的细节


感谢您的建议。

您已经为您的请求指定了内容类型。对于你的情况。此外,还必须在模型类中将精算ID 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; }
}

我们可以看到您正在传递的对象数组吗?如果您正在使用post,那么为什么不在正文中传递精算ID呢?
JSON.stringify({courseattend:courseattend})
试着只发布JSON.stringify(courseattend);这看起来像是在向控制器发送对象,而不是数组。请尝试使用JSON.stringify(courseAttended),谢谢Rorymcrossan@TiisetsoTjabane您也可以检查这个问题,它有一些很好的答案:很可能原始代码没有指定正确的内容类型(JSON),因此模型绑定器无法将传入数据绑定到模型。
 $.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; }
}