首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 6 API多参数

MVC 6 API多参数
EN

Stack Overflow用户
提问于 2016-07-12 11:52:04
回答 1查看 72关注 0票数 1

我有以下API,它负责更新数据库中的项:

代码语言:javascript
复制
    [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方法,如下所示:

代码语言:javascript
复制
    $scope.SaveChanges = function () {
        $http.post("/api/items/update", $scope.items)
            .then(function (response) {
            }, function (err) {
                $scope.errorMessage = "Error occured: " + err;
            }).finally(function () {

            });

    };

我想要做的是在我的初始UpdateRecords函数中引入新的参数,其中一些参数是可选的。然后,根据插入的参数,我的过程会做不同的事情。

我试图做的是更改我的功能,如下所示(示例):

代码语言:javascript
复制
public JsonResult UpdateRecords([FromBody]ICollection<ShoppingItemViewModel> vm, [FromBody]bool EraseOldItems)

在我的角度应用程序下:

代码语言:javascript
复制
$http.post("/api/items/update", {vm:$scope.items, EraseOldItems: true})

甚至是

代码语言:javascript
复制
$http.post("/api/items/update", {'vm':$scope.items, 'EraseOldItems': true})

但是我无法让代码工作(我的参数一直为null)。

我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-12 13:18:33

来自ASP.NET Web中的参数绑定

最多允许从消息体读取一个参数。 //警告:不起作用!公共HttpResponseMessage Post(FromBody int id,FromBody字符串名称){.} 此规则的原因是请求体可能存储在只能读取一次的非缓冲流中。

可以传递包含其他对象的请求对象:

代码语言:javascript
复制
public class Request
{
    public ICollection<ShoppingItemViewModel> vm { get; set; }
    public bool eraseOldItems { get; set; }
}

然后你的行动:

代码语言:javascript
复制
[Route("update")]
[HttpPost("")]
public JsonResult UpdateRecords([FromBody]Request request){ ... }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38328143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档