2011-10-23 20 views
7

Obsługuję żądanie begin_request. W tej chwili używam funkcji Response.End(), aby zatrzymać działanie asp.net. Response.End() zgłasza wyjątek Czy istnieje sposób, w jaki mogę zakończyć żądanie?Alternatywa dla Response.End()?

Jeśli zastanawiasz się, dlaczego nie mam pliku, to bc i nginx powiedzieć, który plik służyć za pośrednictwem nagłówka odpowiedzi http więc nie mam nic więcej do zrobienia w asp.net. Response.End zgłasza wyjątek, który musi zebrać informacje o stosie i to wszystko. Oczywiście nie potrzebuję tego i na podstawie moich przeszłych pytań wiem, że wyjątki od rzucania są drogie. Jak więc mogę zrobić, gdzie?

+0

Co wyjątek ? – Oded

+0

@Oddane dunno, ale jego dokumentacja na msdn i naprawdę nie ma znaczenia –

+0

@Oded: Jest to "ThreadAbortException". –

Odpowiedz

14

HttpResponse.End() zgłasza wyjątek według projektu; to musi działać.

Tylko po wygenerowaniu ThreadAbortException wątek, który wyświetla odpowiedź, kończy się. Jeśli nie ma wyjątków, odpowiedź nie kończy się.

Zamiast tego można zamiast tego zadzwonić pod numer HttpContext.Current.ApplicationInstance.CompleteRequest. Zapobiegnie to wykonywaniu kolejnych kodów, przeskakując bezpośrednio do zdarzenia Application_EndRequest.

+0

Tak, więc w jaki sposób nie mogę uzyskać wyjątku? Widziałem twoją odpowiedź przed edycją i nie widzę przeciążenia w msdn ani autouzupełniania http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end%28v=VS.90%29.aspx –

+0

@ acidzombie24: Masz rację, dlatego edytowałem. Metoda, która ma przeciążenie, to 'Response.Redirect()', która pobiera drugi parametr boolowski, który określa, czy wywołuje on 'Response.End()' wewnętrznie, czy też nie. –

11

zadzwoń HttpContext.Current.ApplicationInstance.CompleteRequest() sposób zamiast Response.End ominąć wykonywanie kodu przypadku Application_EndRequest

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

+0

+1 dla linku –