我正在将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中的这些变量中手动放置值,则该方法可以正常工作。糟糕,我需要这方面的帮助,因为我知道我已经接近了。任何评论都非常感谢。
答案 0 :(得分:2)
假设您正在接听电话, 您想要将物体附着在体内
$http.put("/api/attendance/PutAttendRecord/", stuInfo)
.then(function (d) {
alert(d.data.dc_number);
});
,我认为您不需要[FromBody],因为我相信只有在函数发现不清楚的情况下才指定它。