下载文件后跳转到新页面

4

当我尝试在下载文件后重定向到新页面时,它不起作用。我需要在这段代码中删除或修改什么吗?调试器无法到达它。

byte[] fileData = (byte[])sqlRead[3];

Response.Clear();
Response.AppendHeader("content-disposition", "attachment; filename=" + sqlRead[2]);
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(fileData);

Response.Flush();
Response.End();
Response.Clear();

Response.Redirect("Questions.aspx");

Ahmad,你能告诉我你是怎么解决这个问题的吗? - user833939
5个回答

3

取出

Response.End();

Response.End 方法会终止整个响应,之后的代码将不再执行。

End 方法会导致 Web 服务器停止处理脚本并返回当前结果。文件的剩余内容不会被处理。


我已经将它移除了,但现在我得到了这个异常: HTTP头已发送,无法重定向。 - Ahmad Farid
啊,这是真的。由于ASP.NET使用头部来重定向用户,您将无法以这种方式使用Response.Redirect。我建议您采纳Steven的建议(https://dev59.com/ekjSa4cB1Zd3GeqPIcpE#1244705),使用JavaScript来重定向用户。 - Andrew Hare

3

安德鲁关于Response.End停止执行的说法是正确的。不过我认为,删除它并不能帮助你,因为这只会影响你发送的文件。

你可以使用其他技巧来实现你想要的效果。例如,你可以在具有下载链接的页面上使用一些JS来进行客户端重定向。

编辑

我的建议是,在下载链接上添加一个次要行为,使得点击它既可以下载文件,又可以更改当前页面。如果点击后启动计时器,一秒钟后进行重定向可能会更好。


0

你可以尝试删除这整个代码块:

Response.Flush();
Response.End();
Response.Clear();

我认为问题可能是调用 Flush() 导致内容被发送到浏览器,因此在调用 Redirect() 添加重定向HTTP头时为时已晚。


当我将它们全部删除时,重定向可以正常工作,但下载无法正常工作!! - Ahmad Farid

0

我不是ASP专家,但你还需要将Redirect调用移动到任何写入响应正文之前的位置。

尝试在Response.Clear()之后立即放置Redirect()调用

重定向URL在HTTP响应头中传输,因此在生成正文(因此标题已经生成并发送)之后调用它将导致无效或错误。


0

不要使用response.end(),它会突然结束请求处理线程。


当我移除它时,会出现异常。 - Ahmad Farid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接