전제조건
리퀘스트 사양
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 |
댓글