JSON对象未作为参数传递给webApi PUT方法

时间:2018-07-19 17:25:56

标签: angularjs json asp.net-mvc-5 asp.net-web-api2

我正在将Angularjs和asp.net mvc 5与webApi2一起使用。

我是webApi2的新手,在调用自定义PUT方法时遇到了一些麻烦。过去几天,我已经做了一些研究,尽管我对此情况有很好的感觉,但是由于某种原因,我无法将JSON对象作为参数传递。

路由模板:

routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }

Web api控制器和模型(为简便起见,简称:)

public class AttModel
{
    public string dc { get; set; }
    public string dt { get; set; }
}

[HttpPut]
public IHttpActionResult PutAttendRecord([FromBody]AttModel model)
{
    string dc = model.dc;
    DateTime dt = Convert.ToDateTime(model.dt);

    var record = (from tbl in db.attend_am_y1
                 where tbl.dc_number == dc && tbl.class_date_am == dt
                 select tbl).SingleOrDefault(); 

    record.status_am = "z";
    db.SaveChanges();
}

JavaScript对象(angularjs PUT):

$scope.updateRecord = function () {

    var stuInfo = {
        dc: $scope.student.dc,
        dt: $scope.student.dt
    };

    $http.put("/api/attendance/PutAttendRecord/" + stuInfo)
        .then(function (d) {
            alert(d.data.dc_number);
        });
}

我尝试在没有额外的AttModel类的情况下使用Newtonsoft,并将参数作为jObject传递,但是我仍然在iHttpActionResult方法中收到空值异常。数据并没有符合我的方法。路由问题?

如果我在iHttpActionResult中的这些变量中手动放置值,则该方法可以正常工作。糟糕,我需要这方面的帮助,因为我知道我已经接近了。任何评论都非常感谢。

1 个答案:

答案 0 :(得分:2)

假设您正在接听电话, 您想要将物体附着在体内

     $http.put("/api/attendance/PutAttendRecord/", stuInfo)
    .then(function (d) {
        alert(d.data.dc_number);
    });

,我认为您不需要[FromBody],因为我相信只有在函数发现不清楚的情况下才指定它。