我正在使用通用处理程序来下载csv / excel文件。它工作正常,直到昨天。今天突然它停止在IIS 7.5上进行部署(尽管他在Visual Studio调试模式下使用相同的代码)。这是我的代码:
<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();
}
}
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运行时:它保持在同一页面并按预期下载文件。
有人请帮帮我。
答案 0 :(得分:0)
以上所有代码均可100%正常使用。它绝对没有错。我发现它不起作用的原因是发布文件夹中的web.config没有被某人更新/覆盖,因为工作处于开始阶段我还没有添加对异常处理/错误记录的支持因此处理程序错误(由于访问配置文件中使用的密钥)没有注意到&amp;在debug / dev环境中,配置文件是正确的,因此从未发生过错误。
无论如何,代码对于希望使用通用处理程序下载文件的任何人都很有用。但请注意,上面的代码处于基本阶段,需要更新: 1)用户请求验证 - 参数验证 2)用户会话验证 3)安全实现 4)异常处理 5)记录