通过C#中的POST发送JSON并接收返回的JSON吗?

这是我第一次在任何应用程序中使用JSON

System.NetWebRequest。我的应用程序应该将JSON有效负载(类似于以下内容)发送到身份验证服务器:

{

"agent": {

"name": "Agent Name",

"version": 1

},

"username": "Username",

"password": "User Password",

"token": "xxxxxx"

}

为了创建此有效负载,我使用了JSON.NET库。如何将这些数据发送到身份验证服务器并接收其JSON响应?这是一些示例中看到的内容,但没有JSON内容:

var http = (HttpWebRequest)WebRequest.Create(new Uri(baseUrl));

http.Accept = "application/json";

http.ContentType = "application/json";

http.Method = "POST";

string parsedContent = "Parsed JSON Content needs to go here";

ASCIIEncoding encoding = new ASCIIEncoding();

Byte[] bytes = encoding.GetBytes(parsedContent);

Stream newStream = http.GetRequestStream();

newStream.Write(bytes, 0, bytes.Length);

newStream.Close();

var response = http.GetResponse();

var stream = response.GetResponseStream();

var sr = new StreamReader(stream);

var content = sr.ReadToEnd();

但是,这似乎与使用我过去使用的其他语言相比有很多代码缺陷。我这样做正确吗?以及如何获取JSON响应以进行解析?

谢谢,精英。

// Send the POST Request to the Authentication Server

// Error Here

string json = await Task.Run(() => JsonConvert.SerializeObject(createLoginPayload(usernameTextBox.Text, password)));

var httpContent = new StringContent(json, Encoding.UTF8, "application/json");

using (var httpClient = new HttpClient())

{

// Error here

var httpResponse = await httpClient.PostAsync("URL HERE", httpContent);

if (httpResponse.Content != null)

{

// Error Here

var responseContent = await httpResponse.Content.ReadAsStringAsync();

}

}

回答:

我发现自己使用HttpClient库查询RESTful

API,因为代码非常简单并且完全异步。

(编辑:为了清楚起见,从问题中添加JSON)

{

"agent": {

"name": "Agent Name",

"version": 1

},

"username": "Username",

"password": "User Password",

"token": "xxxxxx"

}

使用两个代表您发布的JSON结构的类,看起来像这样:

public class Credentials

{

[JsonProperty("agent")]

public Agent Agent { get; set; }

[JsonProperty("username")]

public string Username { get; set; }

[JsonProperty("password")]

public string Password { get; set; }

[JsonProperty("token")]

public string Token { get; set; }

}

public class Agent

{

[JsonProperty("name")]

public string Name { get; set; }

[JsonProperty("version")]

public int Version { get; set; }

}

您可能有一个像这样的方法,它将执行您的POST请求:

var payload = new Credentials { 

Agent = new Agent {

Name = "Agent Name",

Version = 1

},

Username = "Username",

Password = "User Password",

Token = "xxxxx"

};

// Serialize our concrete class into a JSON String

var stringPayload = await Task.Run(() => JsonConvert.SerializeObject(payload));

// Wrap our JSON inside a StringContent which then can be used by the HttpClient class

var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");

using (var httpClient = new HttpClient()) {

// Do the actual request and await the response

var httpResponse = await httpClient.PostAsync("http://localhost/api/path", httpContent);

// If the response contains content we want to read it!

if (httpResponse.Content != null) {

var responseContent = await httpResponse.Content.ReadAsStringAsync();

// From here on you could deserialize the ResponseContent back again to a concrete C# type using Json.Net

}

}

以上是 通过C#中的POST发送JSON并接收返回的JSON吗? 的全部内容, 来源链接: utcz.com/qa/412587.html

回到顶部