2017-12-07 4 views
1

Ich versuche, eine Liste von Ganzzahlen an eine C# -Controller-Aktion zu übergeben. Ich habe den folgenden Code:Eine Liste von Ganzzahlen an eine C# -Controller-Aktion übergeben

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); 

Der Controller Aktion:

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

     // ... 

    } 

jedoch die resultierende responseString ist:

{"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

Wenn eine der Antworten Ihnen geholfen hat, bitte upvote und markieren Sie es als Antwort. Wenn Ihre Frage noch unbeantwortet ist, lassen Sie es uns bitte wissen. Wenn Sie eine andere Antwort auf Ihre Frage gefunden haben, posten Sie diese bitte als Antwort. Vielen Dank! :) – pcdev

Antwort

0

Ähnlich this question - Sie kein List<int> Senden Sie Senden einer serialisierten Liste von Ganzzahlen (in diesem Fall eine serialisierte JSON-Zeichenfolge). Sie müssen also am anderen Ende eine Zeichenfolge akzeptieren und deserialisieren sowie alle nicht ganzzahligen Werte behandeln, die möglicherweise auftreten. Etwas wie folgt aus:

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

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

} 

EDIT 2:

Die andere Alternative ist, wie so mehrere Abfrageparameter hinzuzufügen:

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

Dies sollte mit dem Code arbeiten, dass Sie schon haben. ASP.NET kann mehrere Abfrageparameter als List<T> interpretieren.

Leider können Sie das [FromUri] Attribut für die Lösung hinzufügen müssen:

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

    // ... 

} 
0

Es ist einfach, wenn Sie Microsoft.AspNet.WebApi.Client Paket in Client-Anwendung nutzen

Aktion Methode

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

Client Anwendung

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(); 
      } 
     } 
    } 
Verwandte Themen