2017-12-07 8 views
1

정수 목록을 C# 컨트롤러 동작에 전달하려고합니다. 나는 다음과 같은 코드가 있습니다 :정수 목록을 C# 컨트롤러 동작에 전달하십시오.

HttpRequestMessage request; 
    String myUrl = 'http://path/to/getData'; 
    List<int> data = new List<int>() { 4, 6, 1 }; 

    request = new HttpRequestMessage(HttpMethod.post, myUrl); 
    request.Content = new StringContent(JsonConvert.SerializeObject(data, Formatting.Indented)); 

    HttpResponseMessage response = httpClient.SendAsync(request).Result; 
    String responseString = response.Content.ReadAsStringAsync().Result; 
    var data = (new JavaScriptSerializer()).Deserialize<Dictionary<string, object>>(responseString); 

컨트롤러 액션 : 결과 responseString는 그러나

[HttpPost] 
    [ActionName("getData")] 
    public Response getData(List<int> myInts) { 

     // ... 

    } 

:

{"Message":"An error has occurred.","ExceptionMessage":"No MediaTypeFormatter is available to read an object of type 'List`1' from content with media type 'text/plain'.","ExceptionType":"System.InvalidOperationException} 
+0

답변 중 하나가 도움이 되었다면, 답변을 upvote하고 표시하십시오. 귀하의 질문에 여전히 답이 없으면 저희에게 알려주십시오. 질문에 대한 다른 답변을 찾은 경우 답으로 게시하십시오. 감사! :) – pcdev

답변

0

유사 this question에 - 당신이 List<int>를 전송하지 않습니다, 당신이 직렬화 된 정수 목록 (이 경우에는 JSON 직렬화 된 문자열)을 보냅니다. 따라서 문자열을 받아들이고 반대쪽에서 deserialize하고 비 정수 값을 처리해야합니다. 이런 식으로 뭔가 :

[HttpPost] 
[ActionName("getData")] 
public Response getData(string myInts) { 

    var myIntsList = JsonConvert.DeserializeObject<List<int>>(myInts); 
    // Don't forget error handling! 

} 

편집 2 :

다른 대안과 같이 여러 쿼리 매개 변수를 추가하는 것입니다

http://path/to/getData?myInts=4&myInts=6&myInts=1

이 코드와 함께 작동합니다 당신을 벌써 왔어. ASP.NET은 여러 쿼리 매개 변수를 List<T>으로 해석 할 수 있습니다.

죄송합니다, 당신은 솔루션에 대한 [FromUri] 속성을 추가해야 할 수 있습니다 : 당신이 클라이언트 응용 프로그램

의 조치 방법

// POST api/values 
     public void Post(List<int> value) 
     { 
     } 

클라이언트 Microsoft.AspNet.WebApi.Client 패키지를 이용하면

[HttpPost] 
[ActionName("getData")] 
public Response getData([FromUri]List<int> myInts) { 

    // ... 

} 
0

그것은 간단합니다 응용 프로그램

class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var client = new HttpClient()) 
      { 
       var result = client.PostAsJsonAsync("http://localhost:24932/api/values", 
        new List<int>() {123, 123, 123}).Result; 

       Console.ReadLine(); 
      } 
     } 
    }