2015-09-17 3 views
8

Ich versuche, ein Dictionary<string,string> Objekt als Parameter an meine Web-API-Methode zu übergeben, aber wenn ich die Protokolldatei überprüfen, kommt es immer mit einer Zählung von 0:Übergeben Sie einen Dictionary <string, string> -Parameter in Web-API

Web api Methode:

[HttpPost] 
[ActionName("SendPost")] 
public void SendPost([FromBody] Dictionary<string,string> values) 
{ 
    using (var sw = new StreamWriter("F:\\PostTest.txt", true)) 
    { 
     sw.WriteLine("Number of items in the dictionary - " + values.Count); 
    } 
} 

Logik, die die Web-aPI-Aufrufe:

public HttpResponseMessage Send(string uri, string value) 
{ 
    HttpResponseMessage responseMessage = null; 

    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri(URI); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var content = new FormUrlEncodedContent 
      (
       new Dictionary<string, string> { { "value", value } } 
      ); 

     responseMessage = client.PostAsync(uri, content).Result; 
    } 
    return responseMessage; 
} 

Antwort

7

Das Problem ist mit der Tatsache, dass Sie sagen, der Content-Typ ist "application/json", aber Sie übergeben es als FormUrlEncodedContent. Sie müssen entweder StringContent verwenden und den Inhalt serialisiert sich JSON, oder Sie können die Erweiterung Methode HttpClientExtensions.PostAsJsonAsync verwenden, um den Inhalt zu JSON für Sie serialisiert:

public async Task<HttpResponseMessage> SendAsync(string uri, string value) 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri(URI); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(
         new MediaTypeWithQualityHeaderValue("application/json")); 

     return await client.PostAsJsonAsync(uri, content); 
    } 
} 
+0

ich meine Methode geändert haben PostAsJsonAsync zu verwenden, aber es immer noch sagt Die Wörterbuchanzahl in der Protokolldatei ist 0. Soll ich auch ändern, wie ich den Inhalt in meinem Beispiel durchlasse? –

+0

@DenisWessels Haben Sie den von mir geposteten Code verwendet? Oder hast du deine modifiziert? –

+0

Tut mir leid, ich bin albern, ich habe Ihre Erklärung richtig gelesen und meine Logik geändert, um PostAsJsonAsync zu verwenden und direkt durch das Wörterbuch zu gehen, ohne FormUrlEncodedContent zu erstellen. Jetzt funktioniert es! –

Verwandte Themen