Внутри ASPX-страницы я хочу закончить ответ в определенных точках (не из-за ошибки), в зависимости от пути кода, так что ничего больше не будет отправлено обратно поток. Поэтому, естественно, используется:HttpResponse.End vs HttpResponse.Close vs HttpResponse.SuppressContent
Response.End();
Это приводит к ThreadAbortException, который by design.
Следующая, кажется, работает, но не выглядит как правильный подход, согласно this SO question:
Response.Flush();
Response.Close();
Итак, как об этом?
Response.Flush();
Response.SuppressContent = true
, а затем просто позвольте странице закончить нормально.
Я мог бы просто обработать и проглотить ThreadAbortException, но я просто хочу узнать, есть ли что-то неправильное/gotchas с подходом SuppressContent?
Редактировать: Чтобы дать немного больше примеров. Скажем, у меня есть страница ASPX, в которой я могу изменить тип контента на один из нескольких вариантов. В зависимости от типа содержимого и сценария в данной точке кода я хочу предотвратить отправку большего количества контента клиенту. Предположим, что после того, как параметр SuppressContent установлен в значение true, нет проблемы с дальнейшим запуском на стороне сервера. Я просто не хочу, чтобы что-то еще было отправлено клиенту.
Изменить 2: MyPage.aspx - имеет главную страницу, которая может включать в себя стандартный контент, заголовки, колонтитулы и т.д. и т.п. Эта страница может оказать только как обычную страницу. Он также может просто выписать (например) XML-документ для загрузки. Если вы выписываете XML-документ (определенный при загрузке страницы), он очищает вывод, устанавливает тип содержимого в XML, записывает весь XML-выход, а затем, если он оставлен в обычном режиме, вы получаете остальную часть страницы ASPX-рендеринга, являющейся привязана к концу - это, очевидно, не требуется/ломает XML.
Редактировать 3: На данный момент я использую подход SuppressContent. Чтобы довести этот вопрос до конца, я повышаю щедрость и ставит вопрос другим способом: когда должен вы используете SuppressContent? Почему вы использовали его вместо Response.End?
Пожалуйста, смотрите ответ я предоставил ниже для решения я на самом деле в конечном итоге с, как я в конце концов нашел способ избежать ThreadAbortException при использовании response.end. Я уже не ответил на этот вопрос.
Это звучит, как вам нужно внимательно изучить код, чтобы увидеть, что еще можно было бы выписывать в поток ответа после того, как вы закончили. Все это звучит как бит-спагетти. –
Нет других ответов Response.Writes или ничего из кода. Проблема заключается в том, что если страница фактически выписывает XML-документ вместо обычного вывода HTML-страницы, как только я изменил тип контента на XML и написал XML-выход, я не хочу, чтобы оставшаяся часть страницы ASPX быть визуализированным - это, очевидно, сломает XML – AdaTheDev