2012-09-18 2 views
0

매개 변수로 "ContentList"객체를 사용하는이 api 컨트롤러 작업이 있습니다. 내가 지금까지 시도 무엇HttpWebRequest, WebClient 등을 사용하여 MVC 컨트롤러에 객체를 게시하십시오.

[HttpPost] 
    public List<string> SendList(string param, ContentList list) 
    { 
     List<string> testReturn = new List<string> { "test1", "test2", "test3", "test4" }; 

     return testReturn ; 

    } 

이 같은 컨트롤러 액션 호출하는 것입니다 :

 Uri _uri = new Uri("http://localhost:xxxxx/api/FakeTest/SendList?param=test"); 

     var serializer = new JavaScriptSerializer(); 
     string requestData = serializer.Serialize(new 
     { 
      list = ContentList, 
     }); 

     using (var client = new WebClient()) 
     { 
      client.Headers[HttpRequestHeader.ContentType] = "application/json"; 

      var result = client.UploadData(_uri, Encoding.UTF8.GetBytes(requestData)); 

      var tempString = Encoding.UTF8.GetString(result); 
     } 

이 예 tempString는 = [ "TEST1", "TEST2", "TEST3"에서 "를 테스트 4 "] 컨트롤러 동작에 의해 재 호출 된 것처럼 ...

컨트롤러 작업에서 전달 된 ContentList의 속성에 액세스하고 해당 값을 반환 할 수 있습니다 (물론 그에 따라 동작 반환 값을 변경).

그러나 컨트롤러 동작에서 추가 처리를 위해 ContentList 개체를 보내야하며 실패 할 것으로 보입니다. 내가 500 내부 서버 오류가 발생하고 전달 된 값을 따르도록 컨트롤러에 중단 점을 넣을 수 없습니다. 디버거가 절대로 안타 ...

이 json 보내기 컨트롤러 동작.

어쨌든 ContentList가 컨트롤러 동작에서 전송 된 코드에 의해 거부 된 것 같습니다. 그래서 일종의 역 직렬화가 필요합니다. 그렇습니까?

결론 코드에서 컨트롤러 동작을 호출하고 C# 개체를 전달하고 컨트롤러 동작에서 사용할 수 있도록 올바른 방법은 무엇입니까?

답변

0

MVC 3을 사용하는 경우 컨트롤러는 json 데이터를 직접적으로 나타내어 파싱 할 수 있어야합니다. 당신이 MVC 2를 사용하는 경우는 컨트롤러에서 JSON 구문 분석 돌봐 응용 프로그램에 새로운 공장을 등록해야합니다

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); 
} 
여기에 주제에

더 많은 정보 : http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

+0

그것은 실제로 MVC의 4 API 컨트롤러. – Soeren

+0

이 질문을 확인, json 정보를 컨트롤러에 전달하는 방법을 설명합니다. http://stackoverflow.com/questions/560575/asp-net-mvc-how-to-pass-json-object-from-view-to- 매개 변수로서의 제어기 – Bardo

관련 문제