staticasync Task Main(string[] args)
{
HttpClient client = new HttpClient();
var fooResult = await client.GetStringAsync("http://vulcanwebapi.azurewebsites.net/api/values/777");
Console.WriteLine($"{fooResult}");
Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
Console.ReadKey();
}
上面的程式碼執行結果如下所示,因為我們使用的是 GetStringAsync 這個非同步方法,使用 Get 動作來呼叫遠端 Web API;另外,從方法名稱你就可以看的出來,我們這裡得到的執行結果內容,將會是字串。
{"success":true,"message":"透過 Get 方法,接收到 Id=777","payload":{"id":777,"name":"Vulcan01","filename":null}}
Press any key to Exist...
讓我們來看看,這個 Web API 的呼叫動作中,在請求 (Request) 與 反應 (Response) 這兩個階段,會在網路上傳送了那些 HTTP 資料
請求 (Request)
GET http://vulcanwebapi.azurewebsites.net/api/values/777 HTTP/1.1
Host: vulcanwebapi.azurewebsites.net
Connection: Keep-Alive
反應 (Response)
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=9d3635139ab6649f453417d1e9047b7ed7a79b7bef031b04afeb6a2c58b33d4e;Path=/;HttpOnly;Domain=vulcanwebapi.azurewebsites.net
Date: Wed, 18 Oct 2017 15:46:58 GMT
78
{"success":true,"message":"透過 Get 方法,接收到 Id=777","payload":{"id":777,"name":"Vulcan01","filename":null}}
0
HttpClient 類別,提供了很多 Get 動作呼叫的方法,這些方法與相關的多載方法定義,將為回傳不同 Web API 執行結果的內容。
GetAsync(String)
以非同步作業的方式,將 GET 要求傳送至指定的 URI。
GetByteArrayAsync(String)
將 GET 要求傳送至指定的 URI,並透過非同步作業,以位元組陣列形式傳回回應內容。
GetStreamAsync(String)
將 GET 要求傳送至指定的 URI,並透過非同步作業,以資料流形式傳回回應內容。
現在,我們替換 URL 成為一個不存在的 Web API URL
http://vulcanwebapi.azurewebsites.net/api/XXX/777
讓我們來看看會有甚麼結果,底下是我們要測試的程式碼
這裡的專案原始碼,可以從 BadUrl 專案中找到
HttpClient client = new HttpClient();
var fooResult = await client.GetStringAsync("http://vulcanwebapi.azurewebsites.net/api/XXX/777");
Console.WriteLine($"{fooResult}");
Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
Console.ReadKey();
讓我們來看看,這個 Web API 的呼叫動作中,在請求 (Request) 與 反應 (Response) 這兩個階段,會在網路上傳送了那些 HTTP 資料
請求 (Request)
GET http://vulcanwebapi.azurewebsites.net/api/XXX/777 HTTP/1.1
Host: vulcanwebapi.azurewebsites.net
Connection: Keep-Alive
反應 (Response)
HTTP/1.1 404 Not Found
Content-Length: 0
Server: Kestrel
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=9d3635139ab6649f453417d1e9047b7ed7a79b7bef031b04afeb6a2c58b33d4e;Path=/;HttpOnly;Domain=vulcanwebapi.azurewebsites.net
Date: Wed, 18 Oct 2017 15:51:03 GMT
那麼,該要如何處理這樣問題呢?接下來的文章中,將會有更多這方面的程式開發建議。
最後,讓我們來看看這個遠端 Web API 的程式碼:
[HttpGet("{id}")]
public APIResult Get(int id)
{
APIResult foo;
if (id == 777)
{
foo = new APIResult()
{
Success = true,
Message = "透過 Get 方法,接收到 Id=777",
Payload = new APIData()
{
Id = 777,
Name = "Vulcan01"
}
};
}
else
{
foo = new APIResult()
{
Success = false,
Message = "無法發現到指定的 ID",
Payload = null
};
}
return foo;
}
在這個測試範例中,將會執行上述的要求動作方法,從這個方法宣告中,我們可以看到,將會要得到一個 id 參數,代表要查看的物件代碼編號,接著,在程式碼中,將會檢查這個 id 是否為 777,並且根據檢查結果,回傳不同的 APIResult 物件。
在這個 Get(int id) 方法中,我們看到他的回傳型別為 APIResult,而在 ASP.NET Core Web API 系統中,預設將回傳的物件,序列化成為 JSON 格式,所以,在用戶端的程式碼中,你將會得到類似這樣的文字字串。
{"success":true,"message":"透過 Get 方法,接收到 Id=777","payload":{"id":777,"name":"Vulcan01","filename":null}}
在這裡,我們將會說明如何非常簡單的來使用 HttpClient 類別所產生的物件,進行呼叫遠端的 Web API,在這裡,我們將需要呼叫
http://vulcanwebapi.azurewebsites.net/api/values/777
這個 URL,取得回傳的 JSON 文字內容。GetStringAsync
這個非同步方法,將上述的 URL 當作引述傳送過去,就可以取得這個 URL 執行完畢的執行結果,JSON 文字內容,然後,我們就把執行結果輸出到螢幕上。SimpleHttpClient
中看到如下的測試程式碼。static async Task Main(string[] args) { HttpClient client = new HttpClient(); var fooResult = await client.GetStringAsync("http://vulcanwebapi.azurewebsites.net/api/values/777"); Console.WriteLine($"{fooResult}"); Console.WriteLine($"Press any key to Exist...{Environment.NewLine}"); Console.ReadKey(); }
GetStringAsync
這個非同步方法,使用 Get 動作來呼叫遠端 Web API;另外,從方法名稱你就可以看的出來,我們這裡得到的執行結果內容,將會是字串。http://vulcanwebapi.azurewebsites.net/api/XXX/777
HttpClient client = new HttpClient(); var fooResult = await client.GetStringAsync("http://vulcanwebapi.azurewebsites.net/api/XXX/777"); Console.WriteLine($"{fooResult}"); Console.WriteLine($"Press any key to Exist...{Environment.NewLine}"); Console.ReadKey();
[HttpGet("{id}")] public APIResult Get(int id) { APIResult foo; if (id == 777) { foo = new APIResult() { Success = true, Message = "透過 Get 方法,接收到 Id=777", Payload = new APIData() { Id = 777, Name = "Vulcan01" } }; } else { foo = new APIResult() { Success = false, Message = "無法發現到指定的 ID", Payload = null }; } return foo; }
Get(int id)
方法中,我們看到他的回傳型別為 APIResult,而在 ASP.NET Core Web API 系統中,預設將回傳的物件,序列化成為 JSON 格式,所以,在用戶端的程式碼中,你將會得到類似這樣的文字字串。{"success":true,"message":"透過 Get 方法,接收到 Id=777","payload":{"id":777,"name":"Vulcan01","filename":null}}
相關文章索引
關於 Xamarin 在台灣的學習技術資源