Я хотел бы создать пользовательский фильтр исключений, который будет перехватывать исключения, генерируемые в действиях контроллера, которые возвращают результаты JSON.
Я бы хотел провести рефакторинг следующего метода действия:
public JsonResult ShowContent()
{
try
{
// Do some business logic work that might throw a business logic exception ...
//throw new ApplicationException("this is a business exception");
var viewModel = new DialogModel
{
FirstName = "John",
LastName = "Doe"
};
// Other exceptions that might happen:
//throw new SqlException(...);
//throw new OtherException(...);
//throw new ArgumentException("this is an unhandeled exception");
return
Json(
new
{
Status = DialogResultStatusEnum.Success.ToString(),
Page = this.RenderPartialViewToString("ShowContent", viewModel)
});
}
catch (ApplicationException exception)
{
return Json(new { Status = DialogResultStatusEnum.Error.ToString(), Page = exception.Message });
}
catch (Exception exception)
{
return Json(new { Status = DialogResultStatusEnum.Exception.ToString(), Page = "<h2>PROBLEM!</h2>" });
}
}
}
Я хотел бы создать атрибут фильтра пользовательских исключений, который будет перехватывать любые исключения, возникающие в действии, в соответствии со следующей логикой:
- Проверьте, не было ли исключения
- Нет: возврат
- да:
- Если исключение BusinessLogic - вернуть результат JSON
- Если другое необработанное исключение:
- Вход
- Вернуть другой результат JSON с другим кодом результата