1. ホーム
  2. c#

[解決済み] ASP.NET Web APIでダウンロードするファイル名を設定する方法

2022-04-28 12:57:07

質問

ApiControllerクラスで、サーバーが作成したファイルをダウンロードするために、以下のメソッドを用意しています。

public HttpResponseMessage Get(int id)
{
    try
    {
        string dir = HttpContext.Current.Server.MapPath("~"); //location of the template file
        Stream file = new MemoryStream();
        Stream result = _service.GetMyForm(id, dir, file);
        if (result == null)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }
        result.Position = 0;
        HttpResponseMessage response = new HttpResponseMessage();
        response.StatusCode = HttpStatusCode.OK;
        response.Content = new StreamContent(result);
        return response;
    }
    catch (IOException)
    {
        return Request.CreateResponse(HttpStatusCode.InternalServerError);
    }
}

デフォルトのダウンロードファイル名がそのIDであるため、ユーザーが毎回名前を付けて保存するダイアログで自分のファイル名を入力しなければならないかもしれないことを除いて、すべてが完璧に動作しています。上記のコードでデフォルトのファイル名を設定する方法はありますか?

解決方法は?

を設定する必要があります。 Content-Disposition ヘッダを HttpResponseMessage :

HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = "foo.txt"
};