C#에서 POST를 통해 JSON을 발송하고 반환된 JSON을 수령하시겠습니까?
JSON을 처음 써보는 것뿐만 아니라System.Net
및 그WebRequest
모든 어플리케이션에서 사용할 수 있습니다.어플리케이션은 다음과 같은 JSON payload를 인증 서버에 송신합니다.
{
"agent": {
"name": "Agent Name",
"version": 1
},
"username": "Username",
"password": "User Password",
"token": "xxxxxx"
}
이 payload를 작성하기 위해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 payload를 전송하려면:
{
"agent": {
"name": "Agent Name",
"version": 1
},
"username": "Username",
"password": "User Password",
"token": "xxxxxx"
}
투고된 JSON 구조를 나타내는2개의 클래스는 다음과 같습니다.
public class Credentials
{
public Agent Agent { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Token { get; set; }
}
public class Agent
{
public string Name { get; set; }
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 = 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");
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
}
JSON 사용.NET NuGet 패키지 및 익명의 유형을 사용하면 다른 포스터가 제안하는 내용을 단순화할 수 있습니다.
// ...
string payload = JsonConvert.SerializeObject(new
{
agent = new
{
name = "Agent Name",
version = 1,
},
username = "username",
password = "password",
token = "xxxxx",
});
var client = new HttpClient();
var content = new StringContent(payload, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(uri, content);
// ...
구축이 가능합니다.HttpContent
조합하여JObject
피하다JProperty
그리고 나서 전화한다.ToString()
그 위에서StringContent
:
/*{
"agent": {
"name": "Agent Name",
"version": 1
},
"username": "Username",
"password": "User Password",
"token": "xxxxxx"
}*/
JObject payLoad = new JObject(
new JProperty("agent",
new JObject(
new JProperty("name", "Agent Name"),
new JProperty("version", 1)
),
new JProperty("username", "Username"),
new JProperty("password", "User Password"),
new JProperty("token", "xxxxxx")
)
);
using (HttpClient client = new HttpClient())
{
var httpContent = new StringContent(payLoad.ToString(), Encoding.UTF8, "application/json");
using (HttpResponseMessage response = await client.PostAsync(requestUri, httpContent))
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return JObject.Parse(responseBody);
}
}
HttpClient()에서 사용할 수 있는 PostAsJsonAsync() 메서드를 사용할 수도 있습니다.
var requestObj= JsonConvert.SerializeObject(obj);
HttpResponseMessage response = await client.PostAsJsonAsync($"endpoint",requestObj);
언급URL : https://stackoverflow.com/questions/23585919/send-json-via-post-in-c-sharp-and-receive-the-json-returned
'programing' 카테고리의 다른 글
WordPress 4.5 업데이트 후 TypeError 플러그인 던지기 (0) | 2023.03.21 |
---|---|
오른쪽 다이내믹 콘텐츠를 포함한 100% 높이 좌측 사이드바 - 부트스트랩 + Wordpress (0) | 2023.03.21 |
Create-React-App 어플리케이션의 index.html과 index.js 사이의 접속처는 어디입니까? (0) | 2023.03.16 |
동기화된 AJAX 콜이 메모리 누수를 일으킬 가능성이 얼마나 됩니까? (0) | 2023.03.16 |
PL/SQL Oracle 함수 또는 절차 작성을 위한 IS vs AS 키워드 (0) | 2023.03.16 |