1. ホーム
  2. c#

[解決済み] Web APIを使用してファイルを返すには?

2022-09-08 23:26:42

質問

私は ASP.NET Web API .

APIからC#でPDFをダウンロードしたい(APIが生成するもの)。

APIが返すのは byte[] を返すだけでいいのでしょうか?

byte[] pdf = client.DownloadData("urlToAPI");? 

File.WriteAllBytes()?

どのように解決するのですか?

HttpResponseMessage の中に StreamContent を入れて返すのが良い。

以下はその例です。

public HttpResponseMessage GetFile(string id)
{
    if (String.IsNullOrEmpty(id))
        return Request.CreateResponse(HttpStatusCode.BadRequest);

    string fileName;
    string localFilePath;
    int fileSize;

    localFilePath = getFileFromID(id, out fileName, out fileSize);

    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
    response.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
    response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = fileName;
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

    return response;
}

UPD のコメントから パトリッジ : 実際のファイルの代わりにバイト配列からレスポンスを送りたいという人がここにいたら、StreamContent の代わりに new ByteArrayContent(someData) を使いたいと思うでしょう ( ここで ).