2015-09-17 10 views
8

Sto cercando di passare un oggetto Dictionary<string,string> come parametro al mio metodo web API ma se controllo il file di registro viene sempre con un conteggio di 0:Passa un parametro <string, string> nel web

metodo API Web:

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

Logic, che chiama l'API web:

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

risposta

7

Il problema sta nel fatto che stai dicendo che il tipo di contenuto è "application/json", ma lo hai passato come FormUrlEncodedContent. È necessario usare sia per StringContent e serializzare il contenuto a JSON te stesso, oppure è possibile utilizzare il metodo di estensione HttpClientExtensions.PostAsJsonAsync che serializza il contenuto per JSON per voi:

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

ho cambiato il mio metodo da usare PostAsJsonAsync ma è ancora dicendo il conteggio del dizionario nel file di registro è 0. Dovrei cambiare anche il modo in cui sto passando attraverso il contenuto nel mio esempio? –

+0

@DenisWessels Hai usato il codice che ho postato? O hai modificato il tuo? –

+0

Scusa se sono stupido, ho letto correttamente la tua spiegazione e ho cambiato la mia logica per usare PostAsJsonAsync e passare direttamente il dizionario senza creare FormUrlEncodedContent.Ora funziona! –

Problemi correlati