Нет, это невозможно сделать для каждого возможного JSON, возвращаемого вашими действиями контроллера, потому что структура будет другой, а свойства этой переменной result
не будут одинаковыми.
Правильноможно было бы иметь собственный обработчик ошибок, который будет перехватывать все исключения и оборачивать их в четко определенную структуру JSON.Затем вы можете использовать функцию обратного вызова с ошибкой в запросе AJAX для обработки этого случая.
public class AjaxErrorHandler : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult
{
Data = new
{
ErrorMessage = filterContext.Exception.Message
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
}
, который может быть зарегистрирован как фильтр глобального действия:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AjaxErrorHandlerAttribute());
}
и на клиенте вы можететакже есть глобальный обработчик ошибок AJAX для всех запросов AJAX на одной странице:
$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
var json = $.parseJSON(jqXHR.response);
alert(json.ErrorMessage);
});