Мне нужно перенаправить с WebMethod
, и я знаю, что не могу. Поэтому я просто пытаюсь вернуть URL-адрес страницы в качестве строки и перенаправить в обратный вызов success
.ThreadAbortException не правильно улавливается в WebMethod
Проблема: у меня есть огромное количество кода перед перенаправлением и написано одним централизованным методом (только метод, который вызывается перед перенаправлением для выполнения той же операции до этого.) В моем перенаправлении также я должен вызвать эту функцию.
Я просто помещаю свой код здесь, не вызывая централизованную функцию для лучшего понимания.
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string TestException()
{
try
{
System.Web.HttpContext.Current.Response.Redirect("Test.aspx");
return "No Exception";
}
catch(Exception ex)
{
return "Exception";
}
}
в ответ я получаю Internal Server Error (505)
с System.Threading.ThreadAbortException
вместо возвращения «Exception», как и в блоке улова.
Это не в случае с другими исключениями, то есть, если я заменю Response.Redirect
что-то вроде
int i = 0;
int j = 5/i;
Это также вызывает исключение, но не дает мне Internal Server Error (505)
, вместо того, чтобы вернуться «Excetion», то есть возвращается строка из улова блок.
Мои вопросы
- Почему это лечение
System.Threading.ThreadAbortException
отличается от других исключений? - Я знаю, что другая работа вокруг как функция по загрузке и дополнительные параметры, которые будут использоваться в функции
Centralized
, и, проверяя дополнительный параметр, я могу вернуть строку вместо перенаправления, но я хочу знать, есть ли что-нибудь, что я могу использовать внутри webmethod или любой в другом месте, не касаясь централизованной функции, чтобы заставить ее работать?
Ошибка 'Authentication failed' на консоли после использования' Thread.ResetAbort' – Imad
@Imad Поверьте мне, использование 'HttpRedirect' на самом деле не является хорошей практикой. Я предлагаю вам не делать этого. –
Согласился на это долго назад. хотел еще * попробовать * его. – Imad