C# API 호출 방법
전제조건
리퀘스트 사양
POST/JSON
레스펀스 사양
JSON
API호출
레스펀스의 json문자열은 각각의 Model에 넣는것도 좋지만 그대로 쓴다면 JObject가 편할 듯 합니다.
GetResponse
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호출
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);