private static async Task<apiresult> JsonPostAsync(APIData apiData)
{
APIResult fooAPIResult;
using (HttpClientHandler handler = new HttpClientHandler())
{
using (HttpClient client = new HttpClient(handler))
{
try
{
#region 呼叫遠端 Web API
string FooUrl = $"http://localhost:8089/api/Values";
HttpResponseMessage response = null;
#region 設定相關網址內容
var fooFullUrl = $"{FooUrl}";
// Accept 用於宣告客戶端要求服務端回應的文件型態 (底下兩種方法皆可任選其一來使用)
//client.DefaultRequestHeaders.Accept.TryParseAdd("application/json");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Content-Type 用於宣告遞送給對方的文件型態
//client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
var fooJSON = JsonConvert.SerializeObject(apiData);
// https://msdn.microsoft.com/zh-tw/library/system.net.http.stringcontent(v=vs.110).aspx
using (var fooContent = new StringContent(fooJSON, Encoding.UTF8, "application/json"))
{
response = await client.PostAsync(fooFullUrl, fooContent);
}
#endregion
#endregion
#region 處理呼叫完成 Web API 之後的回報結果
if (response != null)
{
if (response.IsSuccessStatusCode == true)
{
// 取得呼叫完成 API 後的回報內容
String strResult = await response.Content.ReadAsStringAsync();
fooAPIResult = JsonConvert.DeserializeObject<apiresult>(strResult, new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore });
}
else
{
fooAPIResult = new APIResult
{
Success = false,
Message = string.Format("Error Code:{0}, Error Message:{1}", response.StatusCode, response.RequestMessage),
Payload = null,
};
}
}
else
{
fooAPIResult = new APIResult
{
Success = false,
Message = "應用程式呼叫 API 發生異常",
Payload = null,
};
}
#endregion
}
catch (Exception ex)
{
fooAPIResult = new APIResult
{
Success = false,
Message = ex.Message,
Payload = ex,
};
}
}
}
return fooAPIResult;
}
接下來,我們須在控制器 (Controller) 中加上一個 Post 的方法 (method),
[HttpPost]
public APIResult Post([FromBody]APIData value)
{
APIResult foo;
if (value.Id == 777)
{
foo = new APIResult()
{
Success = true,
Message = "透過 post 方法,接收到 Id=777 資料",
Payload = value
};
}
else
{
foo = new APIResult()
{
Success = false,
Message = "無法發現到指定的 ID",
Payload = null
};
}
return foo;
}
在這個 Post 方法中,我們帶入一個 APIData 型別的物件,當物件中 Id 這個屬性值為 777 的時候,在 Web API 的動作將會回覆這次的呼叫是成功的且傳回資料型別為 APIData 的 value 物件,否則,會回覆此次呼叫失敗(無法發現到指定的 ID),並傳回 null。
在 Post 的方法實作完成後,接著我們要準備程式的進入點方法(Main method)。
static void Main(string[] args)
{
var fooAPIData = new APIData()
{
Id = 777,
Name = "VulcanSource",
};
var foo = JsonPostAsync(fooAPIData).Result;
Console.WriteLine($"使用 JSON 格式與使用 Post 方法呼叫 Web API 的結果");
Console.WriteLine($"結果狀態 : {foo.Success}");
Console.WriteLine($"結果訊息 : {foo.Message}");
Console.WriteLine($"Payload : {foo.Payload}");
Console.WriteLine($"");
Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
Console.ReadKey();
fooAPIData = new APIData()
{
Id = 123,
Name = "VulcanSource",
};
foo = JsonPostAsync(fooAPIData).Result;
Console.WriteLine($"使用 JSON 格式與使用 Post 方法呼叫 Web API 的結果");
Console.WriteLine($"結果狀態 : {foo.Success}");
Console.WriteLine($"結果訊息 : {foo.Message}");
Console.WriteLine($"Payload : {foo.Payload}");
Console.WriteLine($"");
Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
Console.ReadKey();
}
方法中我們分為兩個部分,先是傳送 Id 這個屬性值為 777 的資料到 Web API ,接著再傳送 Id 這個屬性值為 123 的資料到 Web API ,看看這兩個部分執行後得到的結果是不是如預期。
在此,執行結果我們就不再演示,希望此文章能對你有幫助。