HttpClient PostAsync & Content type application/json

HttpClient PostAsync

Il tutorial di oggi sara’ molto veloce, senza molte parole e soprattutto sara’ codice.

Vi ricordate il tutorial che ho scritto questa estate dal titolo “HttpClient GetAsync - Asynchronous Coding & Performance” dove mostravo come utilizzavo HttpClient e il GetAsync per fare richieste ed ottenere in modalita’ TAP (Task asynchronous programming) i risultati delle diverse API?

Per l’articolo di oggi ho scritto la versione equivalente, ma per effettuare chiamate PostAsync passando in un JSON il nostro dto di tipo T.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public async Task<string> PostAsync<T>(string url, T dto)
{
    using (HttpClient client = new HttpClient())
    {
        string json = JsonConvert.SerializeObject(dto);

        // using System.Net.Http
        var content = new StringContent(json);

        // using System.Net.Http.Headers;
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var result = await client.PostAsync(url, content);

        var response = await result.Content.ReadAsStringAsync();

        if (result.IsSuccessStatusCode == false)
        {
            // Log Failure ...
        }

        return response;
    }
}

PostAsync T

Come vedete il codice e’ davvero molo semplice. Riprendendo lo stile del vecchio articolo vi mostrero’ un esempio pratico molto stilzzato su come usarlo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
private async void DoTest()
{
    Task<string> message1Async = PostAsync<FirstTestDTO>("https:// ...", myFirstTestDTO);
    Task<string> message2Async = PostAsync<SecondTestDTO>("https:// ...", mySecondTestDTO);
    Task<string> message2Async = PostAsync<ThirdTestDTO>("https:// ...", myThirdTestDTO);

    // you can do other code ...
    string message1 = await message1Async;

    // you can do other code based on message1 ...
    string message2 = await message2Async;

    // you can do other code based on message2 ...
    string message3 = await message3Async;
}

Ed ora non vi resta che provarlo su API reali dove passare il vostro DTO.