使用 HttpClient 和 C# 在 post 请求中发送 json

Posted

技术标签:

【中文标题】使用 HttpClient 和 C# 在 post 请求中发送 json【英文标题】:Send a json on a post request with HttpClient and C# 【发布时间】:2019-05-27 16:50:49 【问题描述】:

我的代码有问题,我的目标是通过 API 发送修改,所以我在 HttpClient 上执行 request

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;

public class patchticket

   public string patch(string ticketid)
   

       using (var httpClient = new HttpClient())
       
           using (var request = new HttpRequestMessage(new HttpMethod("PATCH"), "https://desk.zoho.com/api/v1/tickets/"+ticketid))
           
               request.Headers.TryAddWithoutValidation("Authorization", "6af7d2d213a3ba5e9bc64b80e02b000");
               request.Headers.TryAddWithoutValidation("OrgId", "671437200");

               request.Content = new StringContent("\"priority\" : \"High\"", Encoding.UTF8, "application/x-www-form-urlencoded");


               var response =  httpClient.SendAsync(request);
           return response

           
       

   

结果是我没有任何错误,但是更改没有生效。

凭证没问题,我用 curl 用相同的参数对其进行了测试,效果很好。

【问题讨论】:

你不是说“PATCH”而不是“PATH”吗?此外,您现在需要更改您在此处公开的 API 凭据。 是的,这是补丁,那些凭据是假的;) 【参考方案1】:

您似乎想在请求中发布json。尝试定义正确的内容类型,即application/json。示例:

request.Content = new StringContent("\"priority\" : \"High\"",
                                    Encoding.UTF8, 
                                    "application/json");

由于您的方法返回一个string,它可以是一个非异步方法。 SendAsync 方法是异步的,您必须等待请求完成。您可以尝试在请求后致电Result。示例:

var response =  httpClient.SendAsync(request).Result;
return response.Content; // string content

你会得到一个HttpResponseMessage的对象。上面有很多关于响应的有用信息。

【讨论】:

好吧,我明天试试,谢谢,你只是认为这是问题所在吗?在我使用 var response = await httpClient.SendAsync(request); 之前,我的 await 有一个错误,它说我不能使用它,你知道为什么吗? 好吧,我明天试试 :)

以上是关于使用 HttpClient 和 C# 在 post 请求中发送 json的主要内容,如果未能解决你的问题,请参考以下文章

C#用HttpClient类post get,怎么设置cookies

在 C# 中使用 Post 方法 HttpClient 时请求超时

C#:带有 POST 参数的 HttpClient

C# HttpClient 不发送 POST 变量

C# HttpClient(包含Post和Get)

c# 使用HttpClient的post,get方法传输json