Вы можете реализовать свой собственный FilterAttribute
, аналогичный HandleErrorAttribute
.
HandleErrorAttribute обычно выполняет перенаправление при возникновении ошибки, но вы можете реализовать аналогичный атрибут, который возвращает JsonResult.Будет делать что-то вроде следующего:
public class CustomHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
filterContext.Result = new JsonResult
{
Data = new { result = 1 },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.ExceptionHandled = true;
}
}
А затем
[CustomHandleError]
public JsonResult Menu()
{
throw new Exception();
}
Я бы порекомендовал вам загрузить исходный код MVC из CodePlex и проверить текущую реализациюHandleErrorAttribute
.Это намного тоньше, чем моя грубая реализация выше, и вам может потребоваться некоторая ее функциональность.