У меня есть Response.Redirect
на моей странице Employee. Он перенаправляется на страницу "Зарплата".
Response.Redirect ("Salary.aspx");
Он работал нормально, пока я не добавил обработку исключений, как показано ниже.
try
{
Response.Redirect ("Salary.aspx");
}
catch(Exception ex)
{
//MyLog();
throw new Exception();
}
//Remaining code in event handler
Это вызвало новое исключение: "Thread был отменен". Я узнал, что этого можно избежать, установив endResponse
как false для перенаправления.
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();
Объяснение нового исключения: он всегда выдает исключение, но обрабатывается каркасом. Поскольку я добавил try..catch, он был пойман там (и я выбрал новое исключение)
Примечание: CompleteRequest
обходит дополнительные HTTP-фильтры и модули, но не обходит дальнейшие события в текущем жизненном цикле страницы
Примечание. Response.Redirect выдает это исключение для завершения обработки текущей страницы. ASP.Net сам обрабатывает это исключение и вызывает ResetAbort
для продолжения обработки.
Вопрос
- "Установление endResponse как false" может увеличить производительность, поскольку исключение не выбрано?
- "Установление endResponse как false" может уменьшить производительность, поскольку события жизненного цикла страницы не прекращаются?
ловушка
- Если вы установите endResponse как
false
, будет выполнен оставшийся код в обработчике событий. Поэтому нам нужно сделать проверкуif
для оставшегося кода (проверьте: если критерии перенаправления не были выполнены).
Ссылка