본문 바로가기
개발/ASP.NET

C# : API 호출 방법

by ispie 2019. 1. 28.

전제조건

 

리퀘스트 사양
POST/JSON

 

레스펀스 사양
JSON

 

 

API호출

 

레스펀스의 json문자열은 각각의 Model에 넣는것도 좋지만 그대로 쓴다면 JObject가 편할 듯 합니다.

 

GetResponse

 

API에 리퀘스트를 보내서 레스펀스를 돌려받는 처리를 하는 메소드 입니다.

using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Web.Script.Serialization;

public JObject GetResponse(string apiUrl, string jsonParameter)
{
	JObject response = null;
	try
	{
		HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl);
		request.Method = "POST";
		request.ContentType = "application/json;";
		// 커스텀 헤더가 필요한 경우(인증 토큰 등)
		request.Headers.Add("custom-api-param", "value");

		using (var streamWriter = new StreamWriter(request.GetRequestStream()))
		{
			streamWriter.Write(jsonParameter);
		}

		var httpResponse = (HttpWebResponse)request.GetResponse();

		// HttpStatusCode의 판단이 필요한 경우
		if(httpResponse.StatusCode != HttpStatusCode.OK)
		{
			throw new Exception("API호출에 실패");
		}

		using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
		{
			response = JObject.Parse(streamReader.ReadToEnd());
		}

		// ex) response["status"]:"success"
	}
	catch (WebException wex)
	{
		// 200이외의 경우
		if (wex.Response != null)
		{
			using (var errorResponse = (HttpWebResponse)wex.Response)
			{
				using (var reader = new StreamReader(errorResponse.GetResponseStream()))
				{
					response = JObject.Parse(reader.ReadToEnd());
				}
			}
		}
	}
	
    return response;
}

 

API 호출 부분

 

위에서 작성한 GetResponse 메소드를 이용해서 API 를 호출하는 부분 입니다.

var apiUrl = "http://apiurl/v1/getHogepoyo";
var jsonParameter = new JavaScriptSerializer().Serialize(new
{
	name = "Name",
	email = "EmailAddress",
	password = "Password",
	detail_info = new {
			info1 = "info1",
			info2 = "info2"}
	});

JObject response = GetResponse(apiUrl, jsonParameter);

 

 

2019.01.31 추가

 

url 에 QueryString, POST, Header에 커스텀 헤더 설정이 필요한 조건에서의 API 호출

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Web.Script.Serialization;

private void RequestAPI()
{
	JObject response = null;

	var uriBuilder = new UriBuilder("http://apiUrl/user/create");
	var parameters = HttpUtility.ParseQueryString(string.Empty);
	parameters["id"] = "1000";
	uriBuilder.Query = parameters.ToString();
	Uri finalUrl = uriBuilder.Uri;

	HttpWebRequest request = (HttpWebRequest)WebRequest.Create(finalUrl);
	request.Method = "POST";
	request.ContentType = "text/json;";
	request.ContentLength = 0;
	// 専用Header
	request.Headers.Add("header-staff-api", "value");

	var httpResponse = (HttpWebResponse)request.GetResponse();

	if (httpResponse.StatusCode != HttpStatusCode.OK)
	{
		throw new Exception("API request error");
	}

	using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
	{
		response = JObject.Parse(streamReader.ReadToEnd());
	}
}

 

 

댓글