2012-01-17 12 views
16

ボタンをクリックするとブラウザにテキストファイルをダウンロードする簡単なテストページを作成しています。私は今までに見たことのない本当に奇妙なエラーを受けています。何かご意見は?ASP.Netファイルをクライアントブラウザにダウンロード

'Response.End();'にエラーが発生しました。

string filePath = "C:\\test.txt"; 
    FileInfo file = new FileInfo(filePath); 
    if (file.Exists) 
    { 
    Response.ClearContent(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.ContentType = "text/plain"; 
    Response.TransmitFile(file.FullName); 
    Response.End(); 
    } 

がエラー:ファイルがクライアントのブラウザに

コードを取得決して

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.

+1

最後を削除し、Responce.Flush()とResponce.ApplicationInstance.CompleteRequest();を試してください。 – Aristos

+0

いいえ、例外がスローされなくなりました。しかし、コードはブラウザ上で何も起こらずに完了します。 ?? – tier1

答えて

26

をにそれを変更してみてください。あなたがダウンロードしたファイルの名前に問題がある場合は、上記の溶液にだけわずかに加え

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "text/plain"; 
Response.Flush(); 
Response.TransmitFile(file.FullName); 
Response.End(); 
+0

前と同じですが、コードを実行してResponse.End()で例外をスローします。 Response.TransmitFileはokを実行しますが、ファイルは転送されません。 – tier1

+0

実際には、これは動作します。ありがとう! – tier1

+1

@Ashwin:私のコードビハインドファイルでこの解決策を試しています(私の問題はhttp://stackoverflow.com/questions/18599735/downloading-a-dynamic-fileです)。しかし、どこで ' ** HTTPヘッダーが送信された後、サーバーはコンテンツタイプを設定できません**任意の提案ですか? –

7

...

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\""); 

このことはスペースや他の文字が含まれている場合でも、正確なファイル名を返します。

関連する問題