2011-01-05 89 views
1

我建立了一个asp.net页面,返回一个图像Response.BinaryWrite()。这工作正常,但我有以下quesion。停止网页处理

我在Page_PreLoad事件中调用Response.BinaryWrite()。我期望,asp.net继续执行页面的“正常”,直到Unload事件,做了很多不必要的事情,因为所有需要的操作都已完成。我是对的,如果是的话,是否有可能告诉asp.net进一步的处理对于页面来说不再需要。

更新:

感谢所有的答案。正如所建议的那样,我使用了一个ASHX-Handler,它是我所需要的。感谢所有人,并为这个方向的所有答案+1。对于所有与我有同样问题的人来说,David Stratton的链接显示了一个非常简单的方法。

+0

哇,我们都很快想出了httphandler的想法。 – David 2011-01-05 14:12:56

回答

10

Application.CompleteRequest()会为你做到这一点。

导致ASP.NET绕过HTTP管道执行过程中的所有事件和过滤,并直接执行EndRequest事件。

它可以从一个Page类这种方式来访问:

Context.ApplicationInstance.CompleteRequest(); 

但是,如果你想只返回一个图片,你应该创建一个HTTP处理程序(类实现IHttpHandler),而不是正在使用Page。请参阅this有关创建HTTP处理程序的MSDN文章。

+0

我不能找到Response.CompleteRequest,我不知道如何访问HttpApplication实例,链接的msdn-description提到(对不起,我很少用asp.net工作)。你能指导我如何访问? – HCL 2011-01-05 14:20:39

+0

@HCL - 回答更新。 – Oded 2011-01-05 14:32:06

2

你说得对。但是,您不应该使用Page来返回图像。改为使用HttpHandler。而不是

2

使用IHttpHandler您正在寻找Response.End()
但是,由于您没有使用ASPX功能集,因此您应该将代码移至ASHX处理程序中,该处理程序首先不会执行任何您想要避免的操作。
然后你不需要Response.End,你也会获得更好的表现。

1

这不是对您的问题的直接回答,但是您可以将页面更改为ashx http handler以摆脱页面生命周期的开销,如果这正是您真正想要做的。

http://support.microsoft.com/kb/308001

+0

+1感谢您的链接,帮助我的速度非常快。然而,我已经接受了oded的回答,因为他也回答了最初的帖子。但我已经使用了你的ashx解决方案。非常感谢。 – HCL 2011-01-05 14:52:18