2011-10-23 10 views
7

Gestisco una richiesta begin_request. Al momento utilizzo Response.End() per impedire ad asp.net di fare qualsiasi altra cosa. Response.End() genera un'eccezione esiste un modo non eccezionale in cui posso terminare la richiesta?Alternativa a Response.End()?

Se il vostro chiedendo perché non ho il file sua bc dico nginx quale file di servire attraverso un'intestazione di risposta HTTP quindi non ho niente altro da fare in asp.net. Response.End genera un'eccezione che deve raccogliere informazioni sullo stack e tutto ciò. Ovviamente non ne ho bisogno e dalle mie domande passate so che lanciare eccezioni sono costose. Quindi, come posso fare dove?

+0

Qual è l'eccezione ? – Oded

+0

Boh @Oded ma la sua documentata su MSDN e davvero non importa –

+0

@Oded: E 'un 'ThreadAbortException'. –

risposta

14

HttpResponse.End() genera un'eccezione alla progettazione; deve funzionare.

Solo quando il ThreadAbortException si butta, fa il filo che sta rendendo la fine di risposta. Se non c'è eccezione, la risposta non finisce.

Un'alternativa sarebbe quella di chiamare HttpContext.Current.ApplicationInstance.CompleteRequest invece. Ciò impedirà l'esecuzione di ulteriori codici saltando direttamente sull'evento Application_EndRequest.

+0

Sì così come faccio a non ottengo l'eccezione? Ho visto la tua risposta prima della modifica e non vedo un sovraccarico in msdn né un completamento automatico http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end%28v=VS.90%29.aspx –

+0

@ acidzombie24: hai ragione, è per questo che ho modificato. Il metodo che ha il sovraccarico è 'Response.Redirect()', che prende un secondo parametro booleano che dice se chiama 'Response.End()' internamente oppure no. –

11

chiamata HttpContext.Current.ApplicationInstance.CompleteRequest() metodo anziché Response.End per ignorare l'esecuzione del codice all'evento Application_EndRequest

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

+0

+1 per il collegamento –