0

ユーザーにダウンロードさせたくない小さなJsonファイルを生成しています。だから私はブラウザがユーザーにファイルをダウンロードするように促したい.

関連する質問で提案されている多くの回答を試しましたが、うまくいきません。

リクエストはアクションリンクをクリックすることで行われます:

@Ajax.ActionLink("Generate JSON", "GenerateOcJson", new AjaxOptions { HttpMethod = "POST" })

私はもう試した:

var cd = new System.Net.Mime.ContentDisposition { FileName = fileName, Inline = false };
Response.AppendHeader("Content-Disposition", cd.ToString());

return File(Encoding.UTF8.GetBytes(jsonString),
            "application/json",
            string.Format(fileName));

と:

Response.Clear();
Response.ContentType = "application/json";
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.json");
Response.Write(jsonString);
Response.End();

しかし、ブラウザはファイルをダウンロードしません。私は MVC3 を使用しており、このメソッドはアクションリンクによって呼び出されます。POST および GET リクエストを試しました。

Chrome でリクエストを調べると、正しい json がブラウザのレスポンスに書き込まれていることがわかります。

手がかりはありますか?事前にt​​hnx

4

3 に答える 3

1

このようなもの(MIMEタイプをプレーンテキストに設定)と通常の方法を試してください@Html.ActionLink

public ActionResult GenerateOcJson()
{
var document = new { Data = jsonString, ContentType = "text/plain", FileName = String.Format("JSONResults_{0}.json", DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")) };//... get from service layer
    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = document.FileName,
        // Inline = false means always prompt the user for downloading.
        // Set it to true if you want the browser to try to show the file inline (fallback is download prompt)
        Inline = false,
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File(document.Data, document.ContentType);
}
于 2012-11-27T12:44:44.390 に答える
0

Just return a file result with the Application/Octet mediatype. No need to write the content-disposition header.

return File(Encoding.UTF8.GetBytes(jsonString),
            System.Net.Mime.MediaTypeNames.Application.Octet, 
            fileName);
于 2012-11-27T12:29:47.433 に答える
0

Use the generic mimetype of application/octet-stream. The browser will then treat the data as a file to download locally.

于 2012-11-27T12:29:47.940 に答える