2013-03-07 4 views
2

컨트롤러 기능을 웹 API에 매핑하려고합니다.asp.net 웹 API에서 배열 매핑

config.Routes.MapHttpRoute(
       name: "RPCRoutingApiCaseStudy", 
       routeTemplate: "api/{controller}/{action}/{ServiceID}", 
       defaults: new { ServiceID = RouteParameter.Optional } 
      ); 

문제는 내 컨트롤러에서 ServiceID가 배열로되어있는 것입니다. 배열을 받아들이도록 매핑을 설정하려면 어떻게해야합니까? 그러면 어떻게 생겼을까요? 미안하지만 그것이 명백한 질문이라면, 나는이 물건에 익숙하지 않다. 나는 배우려고 노력하고있다.

나는 난 그냥 배열을 위해 무엇을 해야할지하지 않습니다 url/api/controller/method/5

입력 줄 INT에 대해 원하는 일반 매개 변수와 함께 할 방법을 이해합니다.

+0

여기에이 문서를 참조하십시오의 값 - [웹 API는 모든 경로 매개 변수 바인딩 캐치 (HTTP : // www.tugberkugurlu.com/archive/asp-net-web-api-catch-all-rout-parameter-binding) –

답변

0

웹 API에 복잡한 유형을 전달하려면 IENumerable 유형을 포함하는 해당 도우미 클래스를 만들어 JSON 캡슐화를 통해 해당 오브젝트를 웹 API에 전달해야합니다.

다음 예제에서는 POST 메서드를 사용하고 List가 들어있는 CustomListType 개체를 사용합니다. 그런 다음 개체로 원하는 것을 할 수 있습니다.

public class ValuesController : ApiController 
{ 

    [System.Web.Http.AcceptVerbs("POST")] 
    public bool POST(CustomListType myList) 
    { 
     //Do stuff here 

     return true; 
    } 

    public class CustomListType 
    { 
     public List<int> myArray { get; set; } 
    } 


} 

크롬에 Advanced Rest Client을 사용합니다. 당신은 객체를 전송하여 게시물을 테스트 할 수 CustomListType라는 회원을 가지고 있기 때문에 "에서 myArray"우리는 또한 우리의 JSON 객체 "에서 myArray"를 가지고

{myArray:[0,1,2]} 

참고.

당신이 거기에 디버그 라인을 넣을 경우 개체를 볼 수있을한다 "myArray의"

+0

이것은 의미가 없으므로 클라이언트가 배열을 보냅니다. 컨트롤러는 그것을 'myList'에 바인딩하고 모델 바인더가 이미 바인딩 한 것과 동일한 유형으로 데이터를 추가하는 myList를 열거합니다. –

+0

컨트롤러는 생산적이지 않습니다. 내가 설명하고 싶은 부분은 다른 CustomListType을 만든 경우에도 유형의 myArray 멤버를 인스턴스화해야한다는 것입니다. – Tony

+0

맞아요,하지만 모델 바인더가 대신 해줄 겁니다. –

관련 문제