Web API调用后,对象参数始终为null

问题描述 投票:2回答:1

我试图从Angular JS脚本调用ASP.NET Web API方法。 HTTP请求属于POST类型,我正在尝试将一些数据发送到Web API方法。

这是我的AngularJS代码

 $http({
        url: '/api/StudentsBasicInfo/InsertOrUpdateStudentBasicInfo',
        method: "POST",
        data: JSON.stringify(d),
        contentType: "application/json;charset=utf-8",
        dataType: 'json'
    }).success(function (data, status) {
        if (data == "\"success\"") {

    });

在上面的javascript代码中,d是一个简单的JSON对象。

这是我的Web API

        [ActionName("InsertOrUpdateStudentBasicInfo")]
        public string InsertOrUpdateStudentBasicInfo([ModelBinder] StudentDynamicFormVM student)
        {
            try
            {

                StudentsBasicInfoBL studentsBasicInfoBL = new StudentsBasicInfoBL();

                long returnedId = studentsBasicInfoBL.InsertStudentsBasicInfoAndEnrolledProgram(student);

                if(returnedId > 0)
                {
                    return "success";
                }
                else
                {
                    return "error";
                }
            }
            catch(Exception ex)
            {
                return "error";
            }
        }

下面是我尝试将HTTP请求数据绑定到的强类型C#对象

public class StudentDynamicFormVM
{

    public long SerialId { get; set; }

    public long StudentSerialId { get; set; }

    public string FirstName { get; set; }

    public string MiddleName { get; set; }

    public string LastName { get; set; }

    public int ProgramTypeId { get; set; }

    public string AdmittedSemester { get; set; }

    public string AdmittedDate { get; set; }

    public int DepartmentId { get; set; }

    public int ProgramId { get; set; }

    public string MaritalStatus { get; set; }

    public string Nationality { get; set; }

    public string BloodGroup { get; set; }

    public string Country { get; set; }

    public string Religion { get; set; }

    public int Mobile { get; set; }

    public string Email { get; set; }

    public string NationalId { get; set; }

    public string PresentAddress { get; set; }

    public string PermanentAddress { get; set; }

    public string IdentificationMark { get; set; }

    public string ColourOfHair { get; set; }

    public string DateofBirth { get; set; }
}

但是,当我尝试执行此代码时,我的Web API被正确调用(通过调试验证),但发现模型类的所有属性都为null,如屏幕截图所示。

enter image description here

根据这篇文章(Web API complex parameter properties are all null)中的建议,我还将我的Web API代码更改为此

        [HttpPost]
        [ActionName("InsertOrUpdateStudentBasicInfo")]
        public string InsertOrUpdateStudentBasicInfo(object model)
        {
            try
            {

                var jsonString = model.ToString();
                StudentsInfoHybrid student = JsonConvert.DeserializeObject<StudentsInfoHybrid>(jsonString);


                StudentsBasicInfoBL studentsBasicInfoBL = new StudentsBasicInfoBL();

            }
            catch(Exception ex)
            {
                return "error";
            }
        }

但后来我看到Web API正确接收了JSON对象,但在尝试序列化之后,对象参数变为null,即与之前相同的结果(但是没有抛出异常)。

我甚至试图从我的角度JS代码中省略JSON.stringify方法调用,并尝试在POST请求中删除contentType标头。但结果仍然完全相同。

技术堆栈ASP.NET 4.5 Web API Angular JS 1.2.19 Visual Studio 2015

最后,我附上了谷歌Chrome网络日志的截图

enter image description here

asp.net angularjs asp.net-web-api
1个回答
1
投票

将Web API中的属性名称更改为要发送的属性的名称。看起来你正在发送一个名为qazxsw poi的对象。

或者,更改要发布的对象的名称以匹配WebAPI中的模型绑定属性名称

© www.soinside.com 2019 - 2024. All rights reserved.