如何使用C#在POST请求中发送json数据

我想使用C#在POST请求中发送json数据。

我尝试了很多方法,但面临很多问题。 我需要请求使用请求体作为来自字符串的原始json和来自json文件的json数据。

如何使用这两个数据表单发送请求。

例如:对于json中的身份validation请求正文 – > {"Username":"myusername","Password":"pass"}

对于其他API请求体应从外部json文件中检索。

您可以使用HttpClient而不是WebClientHttpWebRequest 。 这是一个较新的实现。

 string myJson = "{'Username': 'myusername','Password':'pass'}"; using (var client = new HttpClient()) { var response = await client.PostAsync( "http://yourUrl", new StringContent(myJson, Encoding.UTF8, "application/json")); } 

在此处输入图像描述

当你需要更多的HttpClient ,建议只创建一个实例HttpClientFactory用它或使用新的HttpClientFactory

你可以用HttpWebRequest做到这一点:

 var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://yourUrl"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = new JavaScriptSerializer().Serialize(new { Username = "myusername", Password = "pass" }); streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); } 

你可以使用HttpClientRestSharp ,因为我不知道你的代码是什么,这是一个使用httpclient的例子:

 using (var client = new HttpClient()) { //This would be the like http://www.uber.com client.BaseAddress = new Uri("Base Address/URL Address"); //serialize your json using newtonsoft json serializer then add it to the StringContent var content = new StringContent(YourJson, Encoding.UTF8, "application/json") //method address would be like api/callUber:SomePort for example var result = await client.PostAsync("Method Address", content); string resultContent = await result.Content.ReadAsStringAsync(); } 

这对我有用。

 var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://url"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = new JavaScriptSerializer().Serialize(new { Username = "myusername", Password = "password" }); streamWriter.Write(json); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); }