普段, サーバサイドのネタが多いのでたまにはクライアントサイドのネタです.
以前は, .NETでHTTPクライアントを作るとなると文字列を連結したりやたらに面倒な処理が必要でしたが, WebClientクラスが正式にリリースされてから, 随分改善されました.
.NETのWebClientは,
- POST
- GET
- PUT
などHTTP動詞をそのままつけて
- PostAsync
などのメソッドで実装されているので, 非常に扱いやすくなっています.
さっそく実装してみる
今回は, サーバに対してHTTPポストするサンプルを示します.
public static HttpContent CreateHttpContent(Dictionary<string, string> dataContent)
{
var content = new FormUrlEncodedContent(dataContent);
return content;
}
public static async Task<Type> HttpPost(string url, HttpContent content)
{
var httpClient = new HttpClient();
try
{
var response = await httpClient.PostAsync(url, content);
var json = await response.Content.ReadAsStringAsync();
return ParseJson(json);
}
catch (HttpRequestException ex)
{
throw ex;
}
}
private static Type ParseJson(string targetString)
{
var parseResult = JsonConvert.DeserializeObject<Type>(targetString);
return parseResult;
}
CreateHttpContentで作成するHttpContentは, Dictionary型のデータを変換するので, hoge=huga&foo=barのような POSTをしたい場合は,
var dataContent = new Dictionary<string, string>()
{
{"hoge", "huga"},
{"foo", "bar"}
};
のような形のDictionaryを生成してください.
今回のサンプルは, レスポンスがjson前提で書いていますが, xmlの場合などは, 適宜jsonのパーサ部分をxmlパーサなどに差し替えてください.
まとめ
今回は, POSTするサンプルを提示しました.
POST以外のGETやPUTを行うサンプルは, ここ
に公開しています.
ちなみに, このコードはユニバーサルWindowsアプリの共有コードとして動くことを前提として書いていますので, WindowsストアアプリとWindowsPhoneアプリでまったく同じコードでHTTP通信を行うことができます.