RestSharpを使ってファイルのダウンロードを行おうとしたのですが、公式サイトに記載の方法だとなぜかファイルがダウンロードされませんでした。
そのため、備忘録としてこちらに残しておきたいと思います。
前提条件
RestSharpがインストールされていること。
事象
公式サイトでは、以下の通り記載されていました。
Working with Files | RestSharp
var tempFile = Path.GetTempFileName();
using var writer = File.OpenWrite(tempFile);
var client = new RestClient(baseUrl);
var request = new RestRequest("Assets/LargeFile.7z");
request.ResponseWriter = responseStream =>
{
using (responseStream)
{
responseStream.CopyTo(writer);
}
};
var response = client.DownloadData(request);
これをほぼ流用する形で、
var client = new RestClient(baseUrl);
var request = new RestRequest("Assets/LargeFile.7z");
を、
var client = new RestClient("コンテンツのURL");
var request = new RestRequest();
に変更して実行したところ、response
がnullとなって返ってきてしまい、ダウンロードに失敗してしまいました。
もちろんURLが間違っているというわけではありませんでした。
(baseUrl
にまるまるコンテンツのURLを渡してしまったのがよくなかったのか?と個人的には思いましたが、本当の原因はよくわかりませんでした。)
解決方法
色々調べてみた結果、以下の方法でファイルのダウンロードに成功しました。
var client = new RestClient("コンテンツのURL");
var response = client.DownloadData(new RestRequest(Method.GET));
ちなみに変数response
には、バイト配列(ファイルデータの実体)が入っています。
そのため、File.WriteAllBytesAsync
などを使ってファイル書き込みをすることで、ローカルに保存することができます。
File.WriteAllBytesAsync("ローカルの保存先", response);
まとめ
RestSharpを使ってファイルのダウンロードを行う方法について、公式以外にもやり方があったのでまとめました。
公式に載っている方法が必ずしもうまくいくわけではないということがわかりました。
できれば公式の方法でやるほうが信頼性が高いので間違いないですが、そこは臨機応変に使い分けていきたいところです。
(RestSharpは公式ドキュメントがあまり充実していないのが残念なところですね。。)