В коде ниже, иногда someFunctionCall()
генерирует исключение:
Поток прерывался.
Каким образом код в блоке кода B никогда не работает? ASP.NET начинает новую дискуссию для каждого вызова метода? Я был удивлен видеть, что, когда это исключение происходит, код в Блоке B никогда не работает, возвраты метода, и мое приложение продолжает бежать. Кто-то может объяснить это?
public void method()
{
// CODE BLOCK A
//...
try
{
someFunctionCall(); // this call is generating thread abort exception
}
catch(Exception ex)
{
// log exception message
}
// CODE BLOCK B
// ...
}
Это исключение ThreadAbortException
; это специальное исключение, которое автоматически повторно генерируется в конце каждого блока catch, если вы не вызываете Thread.ResetAbort ()
.
методы ASP .Net, такие как Response.End
или Response.Redirect
(если вы не передаете false
) генерирует это исключение, чтобы завершить обработку текущей страницы; ваш someFunctionCall ()
, вероятно, вызывает один из этих методов.
ASP .Net сам обрабатывает это исключение и вызывает ResetAbort
для продолжения обработки.
Попробуйте так :
Это мой метод расширения :
public static void WriteJSONObject(this HttpResponse response, object content) {
response.ContentType = "application/json";
response.Write(new JavaScriptSerializer().Serialize(content));
response.End();
}
И логика :
public void RegisterUser() {
try {
Response.WriteJSONObject(new { Result = "See hello" });
}
catch (Exception err) {
if (err.Message != "Thread was being aborted.")
Response.WriteJSONObject(new { Result = err.Message });
else {
Response.End();
}
}
}