我有一个网页,用户可以通过ASP.NET Web处理程序(
以下是一些示例代码,以使其更加清晰:
JavaScript:
当GetPDFData()抛出异常时会出现问题。我们正在尽力避免GetPDFData()抛出异常,但由于其源自用户输入,因此在这里处理它以防止出现我们无法预测的错误。以下是我提出的一种解决方案,但它会显示用户的错误文本(而不是空白页面)。
理想情况下,我希望向用户显示一个弹出窗口,以便他们留在原来的页面。
.ashx
)下载PDF文件。它的实现方式类似于此问题中的答案。我的问题是,当我在JavaScript中执行window.top.location.href = url;
时,如果处理程序抛出异常,我实际上无法控制发生了什么。当一切正常工作时,用户的体验是他们基本上停留在原来的页面上,浏览器告诉他们可以下载PDF文件。然而,在处理程序中抛出异常时,他们将被重定向到处理程序的URL并显示空白页面。以下是一些示例代码,以使其更加清晰:
JavaScript:
function openPDF() {
var url = GeneratePDFUrl();
window.top.location.href = url;
}
处理器:
public override void Process(HttpContext context)
{
byte[] pdfdata = GetPDFData();
context.Response.ContentType = "application/pdf";
context.Response.AddHeader("content-disposition", "attachment; filename=\"" + GetPDFFileName() + "\"");
context.Response.AddHeader("content-length", pdfdata.Length.ToString());
context.Response.BinaryWrite(pdfdata);
}
当GetPDFData()抛出异常时会出现问题。我们正在尽力避免GetPDFData()抛出异常,但由于其源自用户输入,因此在这里处理它以防止出现我们无法预测的错误。以下是我提出的一种解决方案,但它会显示用户的错误文本(而不是空白页面)。
public override void Process(HttpContext context)
{
try
{
byte[] pdfdata = GetPDFData();
WritePDF(pdfdata, GetPDFFileName()); // Executes code in example above
}
catch (Exception e)
{
context.Response.Clear();
context.Response.Write(GetErrorMessage(e));
}
}
理想情况下,我希望向用户显示一个弹出窗口,以便他们留在原来的页面。