Web API调用

时间:2016-10-11 19:28:25

标签: asp.net angularjs asp.net-web-api

我试图从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

最后,我附上了Google Chrome网络日志的屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:1)

将WebAPI中的属性名称更改为要发送的属性的名称。看起来您正在发送一个名为Academic_DetailsStatic的对象。

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