我想知道如何从json发布到http服务器的帖子。 我用来做json的代码如下:
pedro product = new pedro();
product.FirtsName = "Ola";
product.ID = 1;
product.idade= 10;
string json = JsonConvert.SerializeObject(product);
这是pedro
类:
public class pedro
{
public int ID { get; set; }
public string FirtsName { get; set; }
public int idade { get; set; }
}
答案 0 :(得分:0)
使用WebApi,您可以使用以下内容:
string url = "http://url.of.server/";
Pedro product = new Pedro();
product.FirtsName = "Ola";
product.ID = 1;
product.Idade = 10;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.PostAsJsonAsync(url, product).Result;
if (response.IsSuccessStatusCode)
{
// do something
}
}
如果您没有使用WepApi,则有许多类似的方法,例如:https://stackoverflow.com/a/39414248/7489072
除非你绝对必须/想要发布二进制文件并控制接收网络服务器,否则不要像评论中所建议的那样对帖子正文进行Base64编码。 99%的案例中的Web服务器期望一个纯文本体。 如果需要在ASCII范围之外发布字符,请使用正确的HTTP标头指定Unicode主体负载。
更新1(标题): HttpClient类具有属性DefaultRequestHeaders,可用于设置公共请求标头,例如AcceptEncoding。如果您需要对内容标题进行更细粒度的控制,请使用.PostAsync(字符串uri,HttpContent内容)代替.PostAsJsonAsync(仅为Json内容设置一些默认标头)
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string stringFromObject = JsonConvert.SerializeObject(product);
HttpContent content = new StringContent(stringFromObject, Encoding.UTF8, "application/json");
content.Headers.Add("YourCustomHeader", "YourParameter");
HttpResponseMessage response = client.PostAsync(url, content).Result;
if (response.IsSuccessStatusCode)
{
// do something
}
}
更新2(编码): 详细说明编码注释:当然你应该逃避引用和喜欢。但这是Json标准的一部分,应由常见的编码器/解码器处理。最重要的是,您可以对序列化对象的属性使用任何进一步的编码。例如,字符串上的HTML编码和二进制属性上的Base64。只要您知道接收它的网络服务器将正确解码它。
{
"id": 3,
"title": "Decode this",
"description": "this is < HTML encoded >",
"profileImgBase64": "Nzg5MzQ4IHdleWhmQVMmKihFJiphc3R5WUdkdCphc14qVHlpZg0K"
}
因此编码单个属性,但不编码整个Json有效负载,因为您必须在接收管道的开头解码它,而不是Web服务器会理解的东西。