我有以下API,它负责更新数据库中的项:
[Route("update")]
[HttpPost("")]
public JsonResult UpdateRecords([FromBody]ICollection<ShoppingItemViewModel> vm)
{
if (ModelState.IsValid)
{
try
{
var items = Mapper.Map<IEnumerable<ShoppingItem>>(vm);
//update database
_repository.UpdateValues(items, User.Identity.Name);
return Json(null);
}
catch (Exception Ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(null);
}
}
else
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(null);
}
}然后,在我的角度代码中,我执行这个POST方法,如下所示:
$scope.SaveChanges = function () {
$http.post("/api/items/update", $scope.items)
.then(function (response) {
}, function (err) {
$scope.errorMessage = "Error occured: " + err;
}).finally(function () {
});
};我想要做的是在我的初始UpdateRecords函数中引入新的参数,其中一些参数是可选的。然后,根据插入的参数,我的过程会做不同的事情。
我试图做的是更改我的功能,如下所示(示例):
public JsonResult UpdateRecords([FromBody]ICollection<ShoppingItemViewModel> vm, [FromBody]bool EraseOldItems)在我的角度应用程序下:
$http.post("/api/items/update", {vm:$scope.items, EraseOldItems: true})甚至是
$http.post("/api/items/update", {'vm':$scope.items, 'EraseOldItems': true})但是我无法让代码工作(我的参数一直为null)。
我在这里做错什么了?
发布于 2016-07-12 13:18:33
来自ASP.NET Web中的参数绑定
最多允许从消息体读取一个参数。 //警告:不起作用!公共HttpResponseMessage Post(FromBody int id,FromBody字符串名称){.} 此规则的原因是请求体可能存储在只能读取一次的非缓冲流中。
可以传递包含其他对象的请求对象:
public class Request
{
public ICollection<ShoppingItemViewModel> vm { get; set; }
public bool eraseOldItems { get; set; }
}然后你的行动:
[Route("update")]
[HttpPost("")]
public JsonResult UpdateRecords([FromBody]Request request){ ... }https://stackoverflow.com/questions/38328143
复制相似问题