通过C#中的POST发送JSON并接收返回的JSON吗?
这是我第一次在任何应用程序中使用JSON
System.Net
和WebRequest
。我的应用程序应该将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