2016-06-10 13 views
46

Chcę wysłać obiekt dynamiczny jakWyślij wiadomość HTTP POST w ASP.NET Rdzenia użyciu HttpClient PostAsJsonAsync

new { x = 1, y = 2 }; 

jako ciała wiadomości HTTP POST. Więc staram się pisać

var client = new HttpClient(); 

ale nie mogę znaleźć sposób

client.PostAsJsonAsync() 

więc starałem się dodać Microsoft.AspNetCore.Http.Extensions pakiet project.json i dodać

using Microsoft.AspNetCore.Http.Extensions; 

do stosowania klauzuli. Jednak to mi nie pomogło.

Jaki jest najłatwiejszy sposób wysłania żądania POST z ciałem JSON w ASP.NET Core?

Odpowiedz

70

Powinieneś dodać odniesienie do pakietu "Microsoft.AspNet.WebApi.Client" (przeczytaj this article dla próbek).

bez dodatkowego rozszerzenia, można użyć standardowego PostAsync metody:

client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json")); 

gdzie jsonInString wartość można uzyskać dzwoniąc JsonConvert.SerializeObject(<your object>);

+1

Ale Microsoft.AspNet.WebApi.Client nie wygląda biblioteki ASP.NET Rdzeń RC2. A drugi sposób to za dużo powtórzeń kodu (( – Rem

+1

tak, jest to wersja ASP.NET HttpClient – Set

+0

@Rem, dlaczego nie stworzysz metody rozszerzenia 'HttpClient' (' PostAsJsonAsync') aby użyć drugiej metody Pozwala uniknąć powtarzania kodu –

7

Dodałbym do przyjętej odpowiedź, że chcemy także dodać nagłówek do httpClientAccept:

httpClient.DefaultRequestHeaders.Accept.Clear(); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
+0

Dziękuję! To był brakujący link dla mnie –

36

Używam tej klasy:

public class JsonContent : StringContent 
{ 
    public JsonContent(object obj) : 
     base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json") 
    { } 
} 

próbka wykorzystania:

new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }); 
+0

Dobra odpowiedź, coś lepszego w ogólny sposób. JsonContent ... – harveyt

+1

Dlaczego nie metoda rozszerzenia? Public static class JsonContent {public Task PostAsJSonAsync (ten klient HttpClient, object toSerializeAsJson) {...}} – TamusJRoyce