0

次のコードを使用して、ユーザーにファイルをダウンロードさせています。正常に動作しますが、エラーも生成され、エラーの原因は次のとおりですResponse.End();

エラー メッセージ:コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できません。

以下は私のコードです。このエラーを処理するにはどうすればよいですか。また、このエラーがリソースを解放していないため、メモリが不要に使用される可能性があります。

これをasp.net Webフォームアプリケーションに使用します。

    try
    {
        string fileName = Request["file_ID"];
        string path = Server.MapPath("~/App_Data/uploads/"+fileName);


        //string = Server.MapPath(strRequest); 
        System.IO.FileInfo file = new System.IO.FileInfo(path);
        if (file.Exists)
        {
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/"+file.Extension;
            Response.WriteFile(file.FullName);
            Response.End();

            // System.Threading.Thread.Sleep(2000);
           // Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "alert('aa')", true);

        }
        else
        {
            //Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "myWindow.close();", true);
        }
    }


    catch (Exception rt)
    {
         Response.Write(rt.Message);
    }
}

このソリューションを検討していましたが、コードに実装する方法がわかりません。

Web ページで式を評価できません...

アップデート:

私は実際に、ユーザーがファイルをダウンロードして、現在コードでコメントされているコード ビハインド スクリプトを使用して同じように閉じることを望んでいます。

したがって、このコードをより適切に最適化して、respond.end ステートメントによって生成された例外を処理する方法がわかりません。

使ってみましPage.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "myWindow.close();", true);たが、どちらもうまくいきません。

ありがとう

4

2 に答える 2

1

もう1つの答えは、Response.Endは不要なので使用できないか、現在のキャッチがある場所にThreadAbortExceptionのキャッチを追加できると言っているようです

この質問は、次の追加を提案するの質問にリンクし ています。

// Sends the response buffer
Response.Flush()

// Prevents any other content from being sent to the browser
Response.SuppressContent = TrueResponse.SuppressContent = True
于 2013-10-06T07:40:03.413 に答える