2014-07-14 1 views
0

내가 내 webApi 컨트롤러에 MyObject를 모음에 걸릴 필요가 매개 변수 :각도 및 웹 API 광고 2 취급 목록

[RoutePrefix("api/DoStuffApi")] 
public class DoStuffApiController : ApiController 
{ 
    [Route("Update/")] 
    public HttpStatusCode Update(IEnumerable<MyObject> requests) 
    { 
     //DO STUFF 
    } 
} 

나는 일반적으로 목록 얻기 위해 FromBody 매개 변수 속성을 사용해야합니다 :

[Route("Update/")] 
    public HttpStatusCode Update([FromBody] IEnumerable<MyObject> requests) 
    { 
     //DO STUFF 
    } 

컬렉션이있는 개체를 가져 오는 것보다 좋습니까?

[Route("Update/")] 
    public HttpStatusCode Update(MyRequestObject request) 
    { 
     //DO STUFF 
    } 

    public class MyRequestObject 
    { 
     public IEnumerable<MyObject> requests {get;set;} 
    } 

두 번째 예에서는 매개 변수와 일치하는 JavaScript 객체 또는 각도 모듈을 생성하여 각도에서의 호출에 전달할 수 있습니다.

.factory('setSomething', [ 
     '$http', 
     function($http) { 
      return { 
       var data = new objectsToUpdate(); //my custom object with an array in it 
       set: function (customerId) { 
        return $http.post('api/DoStuffApi/Update/', data); 
       } 
      } 
     } 
    ]); 

이 유형의 작업을 수행하는 방법에 대한 정보를 찾을 수 없습니다. The route attributes follow this article.

답변

1

이것은 실제로 게시하려는 개체의 모양에 달려 있습니다. POST의 배열과 다른 데이터를 보내야합니까? 그렇지 않다면 이전 솔루션을 사용하는 것이 더 좋을 것입니다. 그렇지 않으면 유지 보수 할 쓸모없는 추가 코드를 작성하기 때문입니다. 따라서 이전 예제를 사용하면 더 깨끗합니다.

어레이와 함께 귀하의 게시물에서 더 많은 데이터를 가지고 그러나 당신은 당신이 당신의 두 번째 예제에서처럼 .. 컨트롤러에 특별한 모델 클래스에 모두 넣어해야

각 POST를 가질 경우 제대로 그래서 API 모델은 첫 번째 예제에서 IEnumerable에 바인딩되므로 배열 자체를 개체 내에 게시하는 대신 게시 할 수 있습니다.

function($http) { 
     return { 
      var data = new objectsToUpdate(); //my custom object with an array in it 
      set: function (customerId) { 
       return $http.post('api/DoStuffApi/Update/', data.nameOfArray); // Don't post the object, just the array 
      } 
     } 
    } 

모델과 배열의 필드 이름이 같은 경우 그냥 벌금을 IEnumerable에 결합한다.