无法使用通用处理程序下载文件

时间:2015-06-26 17:12:14

标签: asp.net .net asp.net-ajax

我正在使用通用处理程序来下载csv / excel文件。它工作正常,直到昨天。今天突然它停止在IIS 7.5上进行部署(尽管他在Visual Studio调试模式下使用相同的代码)。这是我的代码:

ASPX:这是一个内容页面

<input type="button" class="btn-primary" id="btnDownload" title="Download" value="Download" onclick='return downloadReport(this);' data-toggle="modal" data-target="#myModal" navurl='<%: ResolveUrl("~/Handlers/DownloadData.ashx") %>' />

JS:

function downloadReport(btn) {
//I am using a kendoUI combo box and kendo js + also using bootstrap for design & modal popups & also i have applied bundling to kendo & bootstrap files. They seem to be working fine without any conflicts as all their api's are working.
var $mod = $("#masterModal");
    $mod.modal('show');
    //window.location = "Handlers/DownloadData.ashx?rtp=" + combobox.val();
    window.location.href = $(btn).attr("navurl") + "?rtp=" + combobox.val();
    setTimeout(function () {
        $mod.modal("hide");
    }, 2000);

    return false;
}

母版页:

我在正文标记结束之前包含了包含上述方法的js文件。

<script src='<%: ResolveUrl("~/Scripts/DataUploader.js") %>'></script>  
</body>
</html>

处理程序:处理程序进程请求方法

HttpResponse response = this._context.Response;
            HRReportData hrData = new HRReportData(ConfigMaster.DbProvider, ConfigMaster.ConnectionString, ConfigMaster.DBSchemaName);
            ReportDataManager rdm = null;
            ExcelPackage xlPackage = null;
            try
            {
                rdm = new ReportDataManager();
                DataSet ds = rdm.GetReportData(hrData, report_Type);
                if (ds != null && ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        xlPackage = new ExcelPackage();
                        ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add(report_Type.ToString());
                        worksheet.Cells["A1"].LoadFromDataTable(ds.Tables[0], true, TableStyles.Light1);
                        response.ClearHeaders();
                        response.ClearContent();
                        response.Clear();
                        response.ContentType = "application/octet-stream";
                        response.AppendHeader("content-disposition", "attachment;  filename=" + report_Type.ToString() + ".xlsx");
                        xlPackage.SaveAs(response.OutputStream);
                        response.Flush();
                        //response.Close();
                        //response.End();
                    }
                }
            }
            catch (Exception ex)
            {
                //LogError.MethodLevelError(Convert.ToString(Session["Username"]), ex);
                if (!(ex is System.Threading.ThreadAbortException))
                {
                    //Other error handling code here
                }
            }
            finally
            {
                if (xlPackage != null)
                {
                    xlPackage.Dispose();
                    xlPackage.Dispose();
                }
            }

Bundle config:

bundles.Add(new ScriptBundle("~/Kendo/kendo").Include(
                "~/Scripts/jquery-1.11.3.min.js",
                "~/Kendo/js/kendo.all.min.js"
               // "~/Scripts/DataUploader.js"
            ));
            bundles.Add(new ScriptBundle("~/bootstrap/bootstrap").Include(
                "~/bootstrap/js/holder.js",
                "~/bootstrap/js/ie10-viewport-bug-workaround.js",
                "~/bootstrap/js/ie-emulation-modes-warning.js",
                "~/bootstrap/js/bootstrap.min.js"
            ));

以上所有代码在调试模式下运行良好,并且在部署模式下也运行良好。不知道发生了什么变化,它突然停止工作,我无法找出任何理由:(

部署行为:不是停留在同一页面并下载文件,而是导航到处理程序,并显示空白屏幕。没有下载文件。

debuuging模式下的行为或使用vs2012 express运行时:它保持在同一页面并按预期下载文件。

有人请帮帮我。

1 个答案:

答案 0 :(得分:0)

以上所有代码均可100%正常使用。它绝对没有错。我发现它不起作用的原因是发布文件夹中的web.config没有被某人更新/覆盖,因为工作处于开始阶段我还没有添加对异常处理/错误记录的支持因此处理程序错误(由于访问配置文件中使用的密钥)没有注意到&amp;在debug / dev环境中,配置文件是正确的,因此从未发生过错误。

无论如何,代码对于希望使用通用处理程序下载文件的任何人都很有用。但请注意,上面的代码处于基本阶段,需要更新: 1)用户请求验证 - 参数验证 2)用户会话验证 3)安全实现 4)异常处理 5)记录