2016-07-12 8 views
1

I持っているデータベースに更新する項目の世話をし、次のAPI、: MVC 6 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) 

と私の角度のApp下:

$http.post("/api/items/update", {vm:$scope.items, EraseOldItems: true}) 

あるいは

$http.post("/api/items/update", {'vm':$scope.items, 'EraseOldItems': true}) 

しかし、私はコードを動作させることができませんでした(私のパラメータは常にヌルでした)。

私はここで間違っていますか? Parameter Binding in ASP.NET Web APIから

答えて

2

最大1つのパラメータは、メッセージ本文からの読み取りを許可されています。

// Caution: Will not work!  
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... } 

この規則の理由は、リクエストボディは一度しか読み取ることができ 非バッファされたストリームに格納されるかもしれないということです。その後、

public class Request 
{ 
    public ICollection<ShoppingItemViewModel> vm { get; set; } 
    public bool eraseOldItems { get; set; } 
} 

そして、あなたの行動:

[Route("update")] 
[HttpPost("")] 
public JsonResult UpdateRecords([FromBody]Request request){ ... } 

あなたは他のオブジェクトを含むリクエストオブジェクトを渡すことができます

関連する問題