回答編集履歴

1

追記

2017/06/05 06:26

投稿

退会済みユーザー
test CHANGED
@@ -13,3 +13,65 @@
13
13
 
14
14
 
15
15
  なお、js で行うというのは考えない方がよさそうです。
16
+
17
+
18
+
19
+ ----- 2017/6/5 15:26 追記 -----
20
+
21
+
22
+
23
+ 2017/06/05 14:50 の私のコメントで「return File(path, "text/plain", "TestFileName"); というのはちょっと問題がありそうな気がしますので、老婆心かもしれませんが、注意事項を回答欄に書いておきます」と書きましたが、それを以下に書いておきます。
24
+
25
+
26
+
27
+ ブラウザによって、応答ヘッダーの Content-Disposition: attachment; filename= で指定するファイル名の拡張子と、Content-Type: で指定する MIME Type のどちらでファイルの種類を判断するかが異なります。
28
+
29
+
30
+
31
+ なので、Content-Type と Content-Disposition の両方を正しく設定してやる必要があります。
32
+
33
+
34
+
35
+ それを設定するのが File メソッドの第 2, 3 引数です。
36
+
37
+
38
+
39
+ 質問者さんのコードのように、
40
+
41
+
42
+
43
+ ```
44
+
45
+ public ActionResult DownLoadTest(string path)
46
+
47
+ {
48
+
49
+ return File(path, "text/plain", "TestFileName");
50
+
51
+ }
52
+
53
+ ```
54
+
55
+
56
+
57
+ としたとすると、応答ヘッダの Content-Disposition と Content-Type は以下のようになるはずです。
58
+
59
+
60
+
61
+ ```
62
+
63
+ Content-Type: text/plain
64
+
65
+ Content-Disposition: attachment; filename=TestFileName
66
+
67
+ ```
68
+
69
+
70
+
71
+ Content-Type の方はダウンロードするファイルがホントにテキストファイルならそれでもいいですが、例えば .jpg ですと image/jpeg のようにしないとダメです。(ブラウザによっては、Content-Type の指定通り拡張子を書き換えてしまうものがあります)
72
+
73
+
74
+
75
+ Content-Disposition に設定するファイル名 TestFileName の方は拡張子まで指定するようにしてください。(テキストファイルなら TestFileName.txt、.jpg ファイルなら TestFileName.jpg というように)
76
+
77
+