从ASPX页面上的弹出窗口下载文件通过泛型处理程序

时间:2015-01-29 14:13:28

标签: asp.net popup handler httpresponse generic-handler

我的aspx页面有一个下载链接。点击它后,会发出一个弹出窗口,要求用户在下载之前输入一些基于文件修改的数据。

我已将弹出窗口发出的请求转发给通用处理程序,该处理程序具有生成文件的代码并将其附加到响应头中。

现在,我收到一个线程中止异常因为无法评估表达式,因为代码已经过优化或者本机框架位于调用堆栈之上。

我想由于弹出窗口,客户端没有解释响应头。 请找到代码段并告诉我出错的地方:

弹出按钮的ASPX:

 <button id="BtnDownload" class="btnSubmit" onclick="javascript:downloadFileViaHandler()">
                                        Download</button>

Javascript功能:

function downloadFileViaHandler() {
$('#popupdiv').dialog('close');
var urlHandler = "/WebHandlers/downloadHandler.ashx";
var urlHandlerParam = window.location.href.split('/');
var actualUrlparam = urlHandlerParam[0] + "/" + urlHandlerParam[1] + "/" + urlHandlerParam[2] + "/" + urlHandlerParam[3];
//Sanitize URLs for Server     
var urlHandler = actualUrlparam + urlHandler;
 $.ajax({
  type: 'POST',
  async: false,      
  url: urlHandler,
  data: { FileID: '' + FileID + '\'' },
  success: function (data) {
      console.info(data);
      },
  error: function () {
      alert("Error occured while Downloding File");
  }
  });

}

处理程序代码:

 public void ProcessRequest(HttpContext context)
 {  
   //some Logic to generate file//

 string filePath = str_SaveFileLocation;
 DownloadFilePath = (str_SaveFileLocation); 
 string name = Path.GetFileName(DownloadFilePath);
 string ext = Path.GetExtension(DownloadFilePath); 
 string Filetype = "text/DBC";
 context.Response.Clear();
 context.Response.AppendHeader("content-disposition", "Downloads;   filename=" + name);
 context.Response.ContentType = Filetype;
 context.Response.WriteFile(DownloadFilePath);
 context.Response.End();
}

1 个答案:

答案 0 :(得分:0)

致电ThreadAbortException时,Response.End().正常。请参阅documentation

  

为了模仿ASP中End方法的行为,此方法尝试   引发[ThreadAbortException]异常。如果这是尝试   成功后,调用线程将被中止,这是有害的   到您网站的表现。在那种情况下,调用后没有代码   执行End方法。如果End方法无法引发   [ThreadAbortException],它反而将响应字节刷新到   客户。它同步完成,这也可能是有害的   您网站的效果。