본문 바로가기
C#

C# 주소에 요청 보내고 json 값 받기

by 자유코딩 2019. 1. 4.
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&section=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;
    }
​

 

필요한 글이나 영상이 있으시다면 아래 주소에 올려주세요

https://www.contents.click/

 

 

 

 

 

 

 

'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

댓글