2011-05-24 27 views
136

Tôi đang cố gắng BÀI ĐĂNG JsonObject sử dụng HttpClient từ API Web. Tôi không hoàn toàn chắc chắn làm thế nào để đi về điều này và không thể tìm thấy nhiều trong cách của mã mẫu.Đăng JsonObject Với ​​HttpClient Từ API Web

Dưới đây là những gì tôi có cho đến nay:

var myObject = (dynamic)new JsonObject(); 
myObject.Data = "some data"; 
myObject.Data2 = "some more data"; 

HttpClient httpClient = new HttpClient("myurl"); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = httpClient.Post("", ???); 

Tôi nghĩ tôi cần phải cast của tôi JsonObject như một StreamContent nhưng tôi nhận được hung lên trên bước đó.

Trả lời

148

Với phiên bản mới của HttpClient và không có gói WebAPI nó sẽ là:

var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); 
var result = client.PostAsync(url, content).Result; 

Hoặc nếu bạn muốn nó async:

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

Constructor StringContent quá tải đó đã thực hiện thủ thuật cho tôi. –

149

Cách dễ nhất là sử dụng StringContent, với biểu diễn JSON của đối tượng JSON của bạn.

httpClient.Post(
    "", 
    new StringContent(
     myObject.ToString(), 
     Encoding.UTF8, 
     "application/json")); 
+8

Ghi chú về loại nội dung. Tôi bỏ nó ra và tôi đã gỡ lỗi lâu hơn tôi muốn. – Zapnologica

35

Tùy thuộc vào phiên bản .Net của bạn, bạn cũng có thể sử dụng phương pháp HttpClientExtensions.PostAsJsonAsync.

https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx

+2

Bây giờ tìm thấy trong Microsoft.AspNet.Client.WebApi nuget – jle

+1

Tôi vừa cài đặt nó từ Microsoft.AspNet.WebApi.Client –

+0

Điều này giải quyết được vấn đề của tôi. Tôi đã lộn xộn xung quanh cho một (dài) trong khi đi qua một lớp C# có chứa một số tài sản được danh sách bằng cách sử dụng client.PostAsync, client.SendAsync .. Tôi đã nhận được kết quả rất hỗn hợp. Nếu mảng trống rỗng, giải pháp API của tôi sẽ lấy nó, nhưng nếu mảng có một mục mà phương thức điều khiển không thể mô hình liên kết với JSON. Cảm ơn điều này .. Dường như với tôi rằng PostAsJsonAsync chuyển đổi một cách đáng tin cậy hơn một đối tượng C# phức tạp thành JSON. –

17

Nếu sử dụng Newtonsoft.Json :

using Newtonsoft.Json; 
using System.Net.Http; 
using System.Text; 

public static class Extensions 
{ 
public static StringContent AsJson(this object o) 
    => new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json"); 
} 

Ví dụ:

var httpClient = new HttpClient(); 
var url = "https://www.duolingo.com/2016-04-13/login?fields="; 
var data = new { identifier = "username", password = "password" }; 
var result = await httpClient.PostAsync(url, data.AsJson()) 
+0

đây không phải là lõi asp.net cụ thể, thực sự chung chung của nó xuống đến thậm chí 4.5.6 – danatcofo

+0

'JsonConvert.SerializeObject' vấn đề bằng cách sử dụng *** DateTimes ISO 8601 *** Loại: địa phương hoặc UTC ... http: // www. hackered.co.uk/articles/useful-c-extensions-for-working-with-iso-8601-dates-and-strings – Kiquenet

Các vấn đề liên quan