using System.Net;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += request;
}
private void request(object sender, EventArgs e)
{
using(WebClient wc = new WebClient())
{
var json = new WebClient().DownloadString("https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=pizza");
Console.WriteLine(json.ToString());
}
}
}
}
이렇게 코드를 작성하면 get 방식으로 주소에 json 값을 요청 할 수 있다.
아 그리고 이렇게 요청을 보내려면 코드 위에 using System.Net이 있어야 한다.
파라미터 값이 있는 형태도 한번 살펴보자.
요청을 보내는 C# 코드는 아래와 같다. POST 방식으로 요청을 보냈다.
private void request(object sender, EventArgs e)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8080/csharpTest");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"user_email\":\"test@mail.com\"," +
"\"user_name\":\"우종선\"," +
"\"user_pw\":\"123456789\"}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
Console.WriteLine(result.ToString());
}
}
그러면 여기에 응답하는 스프링 서버 코드를 보겠다.
@PostMapping("/csharpTest")
@ResponseBody
public Map<String,String> csharp(@RequestBody Map<String, String> map){
String userEmail = map.get("user_email");
String userName = map.get("user_name");
String userPw = map.get("user_pw");
Map<String, String> resultMap = new HashMap<String, String>();
resultMap.put("user email", userEmail);
resultMap.put("user name", userName);
resultMap.put("user pw", userPw);
return resultMap;
}
정말 짧게 작성했다.
이렇게 리턴을 해주면 C# 코드에서는 이렇게 결과를 돌려 받는다.
1
|
{"user name":"우종선","user pw":"123456789","user email":"test@mail.com"}
|
cs |
저대로 작성해도 괜찮다.
그런데 C# 코드의 string json 부분이 좋아보이진 않는다.
저렇게 문자열을 그대로 작성하면 오타를 입력 할 확률이 높다.
좋은 코드는 아닌 것 같다.
패키지를 활용해서 더 편하게 요청을 보내보자.
패키지 매니저에서 아래 항목을 설치한다.
설치를 마치고 코드를 이렇게 작성한다. 객체를 생성하면서 자동으로 json 으로 바꿔주는 것이다.
using System;
using System.Windows.Forms;
using System.Net;
using System.IO;
using Newtonsoft.Json;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += request;
}
private void request(object sender, EventArgs e)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8080/csharpTest");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = JsonConvert.SerializeObject(new User("test@test.com","우종선","123456789"));
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
Console.WriteLine(result.ToString());
}
}
}
class User
{
public string user_email { get; set; }
public string user_name { get; set; }
public string user_pw { get; set; }
public User(string user_email, string user_name, string user_pw)
{
this.user_email = user_email;
this.user_name = user_name;
this.user_pw = user_pw;
}
}
}
서버에서 돌려준 값은 이렇다.
1
|
{"user name":"우종선","user pw":"123456789","user email":"test@test.com"}
|
cs |
서버 코드는 이전과 같다.
@PostMapping("/csharpTest")
@ResponseBody
public Map<String,String> csharp(@RequestBody Map<String, String> map){
System.out.println(map.size());
String userEmail = map.get("user_email");
String userName = map.get("user_name");
String userPw = map.get("user_pw");
Map<String, String> resultMap = new HashMap<String, String>();
resultMap.put("user email", userEmail);
resultMap.put("user name", userName);
resultMap.put("user pw", userPw);
return resultMap;
}
필요한 글이나 영상이 있으시다면 아래 주소에 올려주세요
'C#' 카테고리의 다른 글
ASP.net 정리 (0) | 2019.02.07 |
---|---|
C# const 와 readonly (0) | 2019.02.01 |
asp.net 기초 (0) | 2019.01.31 |
C# 리스트를 데이터 그리드 뷰(DataGridView)에 바인딩 하는 팁 (0) | 2018.05.23 |
C# 프로그래밍 강좌 1장 / 프로젝트 생성하기 (0) | 2018.03.10 |
댓글