전제조건
리퀘스트 사양
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());
	}
}
'개발 > ASP.NET' 카테고리의 다른 글
| C# EPPlus에서 수식설정 변경&값 검색 (0) | 2019.01.28 | 
|---|---|
| ASP.NET MVC의 개발이 처음인 사람을 위한 조언 (0) | 2019.01.28 | 
| SQL과 JSON의 이스케이프(escape) 처리 (0) | 2019.01.28 | 
| ASP.NET MVC : 다국어 대응에 대한 메모 (0) | 2019.01.28 | 
| ASP.NET MVC : Response Header에 Cookie설정 (0) | 2019.01.28 | 
댓글