0

我正在尝试从我的 Server.Mappath("/Test.txt"); 获取文件 文件。我收到一个错误

代码

proteced void lnkDownload_Click(object sender,EventArgs e)
{
 string strFileName = lnkDownload.Text;
 string path = Server.MapPath("~/Attachments//" + strFileName);
 try
 {
    if (File.Exists(path))
    {
      byte[] bts = System.IO.File.ReadAllBytes(path);
      MemoryStream ms = new MemoryStream(bts);
      Response.AddHeader("Content-Disposition", "attachment;filename=\"" + strFileName + "\"");
      Response.TransmitFile(path);
      Response.End();
    }   
 }
 catch(Exception ex)
 {
throw ex;
 }  

}

错误:当代码执行到达 Response.End() 时,它会给出一些未知错误

在此处输入图像描述

显示如上图所示的异常详细信息。但最后的异常来了

System.Threading.ThreadAbortException:线程被中止。

在 System.Threading.Thread.AbortInternal()

在 System.Threading.Thread.Abort(Object stateInfo) 在 System.Web.HttpResponse.End()

4

1 回答 1

1

得到了解决方案。它正在编辑代码。

 protected void lnkDownload_Click(object sender, EventArgs e)

{

    string strFileName = "Test.txt";// lnkDownload.Text;

    string path = Server.MapPath("~/Attachments//" + strFileName);

    //try

    //{

        if (File.Exists(path))

        {

            byte[] bts = System.IO.File.ReadAllBytes(path);

            MemoryStream ms = new MemoryStream(bts);

            Response.Clear();

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

            Response.TransmitFile(path);

            Response.End();

        }

    //}

    //catch (Exception ex)

    //{

    //    throw ex;

    //}    

}

首先,我在 Page_Load 事件的开头添加了以下代码。

响应。清除();

其次,删除 'Response.End();' 进入 try catch 块,它导致了我前面提到的问题。

我们可以删除它并直接使用它。

Response.End(),中止当前线程。如果我们在 try 块内调用,我们需要捕获线程中止。如果我们使用 try 块,则需要捕获 abort 并重新抛出它。

于 2013-11-12T11:15:24.390 回答