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

Roc*_*cky 17 c# rest asp.net-mvc json web-services

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

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

如何使用这两种数据表单发送请求.

例如:对于json中的身份验证请求体 - > {"Username":"myusername","Password":"pass"}

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

NtF*_*reX 40

您可以使用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"));
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您需要HttpClient更多,那么建议只创建一个实例并重复使用或使用新实例HttpClientFactory.


kka*_*urt 15

你可以这样做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();
}
Run Code Online (Sandbox Code Playgroud)

  • 据我了解,如果流编写器是使用 using 创建的,则不需要在流编写器上执行刷新和关闭。 (2认同)

Val*_*rie 13

您可以使用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();   
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用。

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();
}
Run Code Online (Sandbox Code Playgroud)