今天遇到一个奇怪的问题。我设法解决了其他问题。我的ASP页面包含NO控件(因此没有可能导致问题的空白图像URL)。程序本身,从VB代码后面,从数据库中获取二进制数据,并对页面执行Response.BinaryWrite(imagedata)。当我在Chrome或Firefox中运行它时,一切都很完美。当我在IE中运行时,在我的代码完成执行后,它再次运行Page_Init并再次运行Page_Load,就好像第一次重新加载一样。回发的值总是假的,所以没有办法解决它。这是asp代码(你可以看到,没什么兴趣)......
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="pagenamehere.aspx.vb" Inherits="x.x.x.x.y" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Test</title>
</head>
<body>
</body>
</html>
Page_Init和Page_Load签名如下
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
'checks database connection string and handles error if there is one
End Sub
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
'checks user is authenticated to view the image and if so, does the binarywrite
End Sub
我已经尝试将autoeventwriteup更改为true并取消处理Me.Load等但没有效果。我也尝试检查Sender对象,但是第一次加载页面和页面不需要的第二次加载之间没有任何变化。
最后,页面在以下代码
之后第二次加载 Response.Clear()
Response.ClearContent()
Response.ClearHeaders()
Response.Buffer = True
Response.ContentType = "image/vnd.djvu"
Response.AddHeader("Content-Disposition", "inline;filename=temp.djvu")
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.BinaryWrite(imagedata)
Response.Flush()
Response.Close()
在Response.Close之后直接它将返回到Page_Init。我已经尝试过response.end但它没有任何区别。我试过删除标题,缓存信息等但没有运气。请帮忙!
由于
答案 0 :(得分:0)
你真的不应该像那样使用Response.Close
*。这真的只适用于protecting against attacks or other error-type conditions:
此方法突然终止与客户端的连接 方式,不适用于正常的HTTP请求处理。该 方法向客户端发送重置包,这可能导致响应 在服务器,客户端或其中的某个位置缓冲的数据 之间被丢弃。
您可以使用此方法来响应恶意HTTP的攻击 客户。但是,通常您应该调用CompleteRequest,如果 你想跳到EndRequest事件并发送响应 客户。
它将导致与您描述的问题非常相似的问题(因为它向客户端发送“重置”请求)。尝试更新您的代码以使用Response.CompleteRequest,这应该(可能)解决您的“多个请求”问题。
* 请参阅此博客文章,深入分析原因:Response.End, Response.Close, and How Customer Feedback Helps Us Improve MSDN Documentation