2011-01-05 88 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