Возврат специального JsonResult в случае возникновения исключения - PullRequest
3 голосов
/ 07 февраля 2011
public JsonResult Menu() { // Exception }

Мне нужно, чтобы приложение не перенаправляло пользователя на страницу 404, а возвращало специальный результат JSON, такой как {"result": 1}.
Интересно, есть ли другое решение, кроме перехвата попыток.

1 Ответ

6 голосов
/ 07 февраля 2011

Вы можете реализовать свой собственный 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.Это намного тоньше, чем моя грубая реализация выше, и вам может потребоваться некоторая ее функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...