nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

Xamarin.FormsでHttpClientを使う二つの方法

PCLプロジェクトからHTTPの呼び出しを行う場合、async/awaitをサポートしたHttpClientを利用したいですよね。
HttpClientを利用する場合、二つの利用方法があるみたいです。

本エントリーではそれぞれの利用方法と、選択のポイントをまとめましたので、良かったら参考にしてください。

方法は二つあります。

PCL内に含まれているものを利用する方法

つまるところ、標準のライブラリ内の物を利用する方法です。
対象のPCLプロジェクトを「Windows Phone Silverlight 8」で利用する予定がないのであれば、こちらの方法を選択すべきです。
「Windows Phone Silverlight 8」には含まれていないため、この方法は利用できません。
「Windows Phone Silverlight 8」は基本的に後方互換のためのものなので、特別な理由がない限り必要ないはずです。
Windows Phone 8.1も対象にされたい場合、いまから新規開発するのであれば「Windows Phone 8.1」を利用すれば済むケースが多いでしょう。

さて、現在のXamarinの最新版を利用している場合、デフォルトで「Windows Phone Silverlight 8」のサポートは除外された形でPCLプロジェクトが作成されます。
しかし、最新のAlphaチャネルで作ったものや、少し前に作成されたPCLプロジェクトは「Windows Phone Silverlight 8」が対象に入っている可能性があります。

PCLのサポート対象を変更する場合、プロジェクトのプロパティから変更します。
ただし、NuGetパッケージが登録されていると変更できませんので、いったんNuGetの登録を削除してからサポート対象を変更し、再度NuGetから必要なパッケージを割り当ててください。

以下の方法は問題がある可能性があるとの指摘を、@ytabuchiさんからいただいたの修正しました。

その場合、.csprojを直接修正するのが最も簡単です。

.csprojをまずはメモ帳などで開いてください。
すると以下のような記述があります。

    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>

ここのProfileを259から7か111に変更します。
Windows Phone 8.1を切り捨てられるのであれば7を、そうでないなら111に修正してください。

NuGetから「Microsoft HTTP Client Libraries」を入れて利用する方法

「Windows Phone Silverlight 8」が必要な場合だけ、こちらを利用します。

というのは、この方法だと、現時点でエラー一覧から警告を無くすことが私にはどうしてもできませんでした。
一応動きはするのですが、エラーが出ている以上、どういった不具合があるかわからないので、ちょっと怖いですよね。 エラー的には動作上問題になることはないと思うのですが。。。 なので、「Windows Phone Silverlight 8」が必要な場合だけ、こちらを利用することをお勧めしたいと思います。

以上です。 それではまた!