2016-06-10 341 views
46

在ASP.NET核心發送HTTP POST消息我想送動態的物體,像使用HttpClient的PostAsJsonAsync

new { x = 1, y = 2 }; 

如HTTP POST郵件的正文。所以我嘗試寫

var client = new HttpClient(); 

,但我不能找到方法

client.PostAsJsonAsync() 

於是,我就添加Microsoft.AspNetCore.Http.Extensions包project.json並添加

using Microsoft.AspNetCore.Http.Extensions; 

使用條款。但它沒有幫助我。

那麼,在ASP.NET Core中使用JSON主體發送POST請求最簡單的方法是什麼?

回答

70

您應該添加對「Microsoft.AspNet.WebApi.Client」包的引用(請參閱樣本this article)。

無需任何額外的擴展,可以使用標準的PostAsync方法:

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

其中jsonInString值可以通過調用JsonConvert.SerializeObject(<your object>);

+1

但Microsoft.AspNet.WebApi.Client並不像ASP.NET核心RC2庫。而secon的方式實際上是太多的代碼重複(( – Rem

+1

是的,這是一個ASP.NET版本的HttpClient – Set

+0

@Rem爲什麼不創建一個'HttpClient'擴展方法('PostAsJsonAsync')來使用第二種方式。它可以讓你避免代碼重複。 –

7

我會添加到接受的答案,你也想增加獲得Accept header to httpClient

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

謝謝!這是我的缺失鏈接 –

36

我使用這個類:

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

用法示例:

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

好的答案。通用的方式更好的東西。JsonContent ... – harveyt

+1

爲什麼不使用擴展方法?public static class JsonContent {public Task PostAsJSonAsync(this HttpClient client,object toSerializeAsJson){...}} – TamusJRoyce