Пустой ответ после фильтра исключения

Мне нужен глобальный фильтр исключений, который будет обрабатывать исключение и возвращать настроенный результат/сообщение для ответа. На стороне клиента у меня есть глобальная функция ошибки ajax, которая обрабатывает все ошибки при каждом вызове ajax.

Проблема заключается в том, что где-то в приложении появляется ошибка, вызываемая глобальным фильтром исключений, и я пытаюсь создать какой-то пользовательский ответ, но после этого, когда страница отображается, на стороне клиента ответ пуст (предупреждение выводит ответ),

Важно то, что я пытался использовать событие Global.asax "Application_Error", и ответ работает. Почему это? Какая у меня реакция? Как я могу заставить его работать?

Глобальный фильтр исключений (текст ответа пуст на стороне клиента):

public class ExceptionAttribute : HandleErrorAttribute
{
 public override void OnException(ExceptionContext filterContext)
 {
 //I need to clear response so that I don't have yellow screen of death
 filterContext.HttpContext.Response.Clear();
 filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
 filterContext.HttpContext.Response.Write("OnException - Response");

 //this doesn't work too
 filterContext.Result = new JsonResult { Data = "OnException - JSON" };

 //doesn't help
 filterContext.HttpContext.Server.ClearError();
 }
}

Обработчик ошибок Global.asax (ответ появляется на стороне клиента):

protected override void Application_Error(object sender, EventArgs e)
{
 Response.Clear();
 Response.Write("Application_Error Test");
}

Глобальный обработчик ajax клиентской стороны:

$(document).ajaxError(function (event, xhr, settings, exception) {

 event.stopPropagation();

 if (xhr != null) {

 alert(xhr.responseText);
 }
});
1 ответ

Вам нужно установить filterContext.ExceptionHandled = true; (или Server.ClearError();)

licensed under cc by-sa 3.0 with attribution.