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

JSON object not passing as param to webApi PUT method

我正在使用 Angularjs 和 asp.net mvc 5 与 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 class 的情况下使用 Newtonsoft,并将参数作为 jObject 传递,但我仍然在 iHttpActionResult 方法中遇到空值异常。数据只是没有进入我的方法。路由问题?

如果我在 iHttpActionResult 的这些变量中手动放置值,该方法工作正常。

假设您可以正常接听电话, 你想在正文中附加你的对象

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

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