- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个网页,用户可以通过 ASP.NET 网络处理程序 (.ashx
) 下载 PDF 文件。它的实现就像这个question中的答案一样.我遇到的问题是,当我在我的 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));
}
}
理想情况下,我想向用户显示一个弹出窗口,以便他们留在原来的页面上。
最佳答案
首先在this answer of mine用户询问如何使用 javascript 进行下载。但如果您有链接,则不必将其添加到 javascript,您也可以使用常规下载链接添加它。
现在很多网站都使用带有一些文本的页面,上面写着“现在您的下载将在几秒钟内开始。如果没有开始,请单击此处 bla bla bla”。原因之一与您的类似,用户必须知道某些内容将在几秒钟内开始下载,如果没有,则用户明白没有其他额外消息存在问题。
一般来说,当你要发送一个文件进行下载时,你已经不在页面中了,你不能在下载过程中发送消息,或者当文件以 pdf 结尾时,那么可能不会发送在网页上显示任何内容。因此,从我的 Angular 来看,如果您确实遇到问题并抛出异常,则需要设计一些步骤来告知用户出现问题的方式 - 比如通知用户 “现在您要接收文件 - 如果文件没有在几秒钟内开始下载,请执行此操作“
However, when there is an exception thrown in the handler they are redirected to the URL of the handler and shown a blank page.
为避免黑页,出错时您可以返回该代码,用户将原样停留在页面上,但仍未收到任何错误消息。
Response.TrySkipIisCustomErrors = true;
Response.Status = "204 No Content";
Response.StatusCode = 204;
Response.End();
作为异常的替代方案,您可以尝试使用
将他重定向到错误页面Response.Redirect("errorpage.aspx");
也许您可以在那里发送一些错误 ID。
您也可以尝试只显示一条简单的消息
context.Response.ContentType = "text/html";
context.Response.Write("Error downloading file - Please contact with us");
关于c# - 从 ASP.NET Web 处理程序 (.ashx) 下载文件时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609389/
我遇到了一个关于呈现验证码图像的 ASHX 处理程序的真正令人烦恼的问题。真正让人头疼的是,它在两个月前还运行良好,而当我今天再次使用它时,它就停止工作了。 我得到的是一个经常抛出验证码的页面。这是来
每当我访问我的 ashx,例如 download.ashx?id=18 时,它都会获取文件,但是当保存对话框弹出时,它要我保存 download.ashx 而不是我存储在数据库中的文件(让说 mypd
我在使用 ASHX 处理程序时遇到问题。下面这段代码在本地机器上工作正常,但在服务器上不工作。 public void ProcessRequest(HttpContext context) {
1,sumbit表单提交 WebForm1.aspx源码: 复制代码代码如下: <%@ Page Language="C#" AutoEve
我有一个 ashx 处理程序,用于从 flex 页面上传文件。我无法扩展表单例份验证来保护 ashx 文件。有办法做到这一点吗? 最佳答案 您始终可以检查 .ashx 文件中的 context.Req
我在网上看到了很多关于如何通过从 UnsecuredLayoutsPageBase 等继承来允许匿名访问特定 SharePoint 应用程序页面的信息。 如何为布局目录中的 ashx 处理程序实现相同
我有 ashx 文件,我想从 ashx 重定向到 aspx 页面。一些解决方案? 最佳答案 void ProcessRequest(HttpContext context) { contex
我的业务逻辑代码存储在 .ashx 文件中。我发送一个 POST 请求来创建数据,并发送一个 GET 请求来检索 JSON 数据,然后将其显示在页面中。 我的问题是:如何防止 JoeNobody 直接
我正在尝试从我的 Amazon S3 存储桶加载远程图像并将其以二进制形式发送到浏览器。我也在尝试同时学习 ASP.Net。我多年来一直是一个经典的程序员,需要改变。我昨天开始,今天第一次头痛。 在我
我需要将大量数据从 Web 应用程序发送到 ASSX 处理程序。然后,处理程序会将数据发送到 Web 服务以获取响应。 (处理程序处理 Web 服务的原因是因为 Web 应用程序是用经典 ASP 编写
我正在尝试从我的 Amazon S3 存储桶加载远程图像并将其以二进制形式发送到浏览器。我也在尝试同时学习 ASP.Net。我多年来一直是一个经典的程序员,需要改变。我昨天开始,今天第一次头痛。 在我
我在我的应用程序中实现了一个适用于图像的通用处理程序,但是当我在浏览器中使用图像的查询字符串手动键入处理程序 URL 时,它会提示下载而不是显示。这是我的代码: public void Process
进行 ajax 调用 var request = $.ajax({ type: 'POST', url: "http://localhost/thcstore/AJAX/Aja
我在将逗号分隔的字符串拆分为数组时遇到问题。在我的 ashx 处理程序页面中,我的字符串如下所示: context.Response.Write(string.Format("{0},{1},{2},
双重道歉 - 首先,我是 ASP.net 的新手,所以我确定这是一个非常幼稚的问题,其次,看起来已经有一百个关于 ASP.NET 中相对路径的问题.不幸的是 - 我找不到能回答我问题的答案。 背景 -
我已经浏览了基本的 MSDN 信息和一些教程。根据我目前所学,我已经能够制作两个 .ashx 处理程序,我称之为 ImageHandler.ashx 和 PDFHandler.ashx。它们会按照您的
除了类似的问题,我找不到解决问题的方法。我对 JavaScript 也不是很熟练。 我创建了一个 ashx 处理程序来从 Sharepoint 站点下载文件。当数据库中的文件存在时,一切正常。如果文件
我有一个从 MySql 返回的图像。 Mysql中它的数据类型是image。我用 ashx 处理图像。下面的代码显示了我的 ashx 文件。 string imageID = context.Requ
当用户在浏览器中查看 ashx 文件时,我想更改打开窗口的“页面标题”。用户单击将在浏览器的新选项卡中打开的文档,并显示该文档(即 Word、Excel、PDF 等)。现在发生了什么,当我希望标题显示
我正在使用 ashx 提供来自数据库的图像,是否可以让用户单击允许他们在计算机上下载文件的链接。 (IE 显示保存对话框)就像您下载文件一样。这可能吗? 最佳答案 如果您希望它提示保存,请确保在创建响
我是一名优秀的程序员,十分优秀!