ASP.NET MVC Json 404 Ответ - PullRequest
       4

ASP.NET MVC Json 404 Ответ

1 голос
/ 02 марта 2012

Подобные вопросы задавались много раз, но по какой-то причине ничего из того, что я пробовал, не сработало.У меня есть приложение ajax, и когда пользователь запрашивает неверный URL, я хотел бы вернуть JsonResult, который выглядит примерно так:

[ error: true, status: 404, message: 'The requested page could not be found... or some other message... ']

Я не хочу, чтобы пользователь просто перенаправлялся на страницу ошибкиопределенный в файле web.config, который вывел бы их из приложения AJAXиз-за исключений, генерируемых моим кодом

Пользовательский FilterAttribute, который расширяет FilterAttribute и реализует IExceptionFilter - та же проблема, что и раньше Override HandleUnknownAction в базовом контроллере - Не удалось выяснить, как вернуть JsonResult изметод Добавлен маршрут «поймать все» - мои другие маршруты используются до того, как будет найден маршрут «поймать весь маршрут»

Любые мысли приветствуются.

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

• Переопределить действие HandleUnknownAction в базовом контроллере. Не удалось выяснить, как вернуть JsonResult из метода

new JsonResult() 
  { 
    Data = your_404_data,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
  }.ExecuteResult(ControllerContext);

Обновлен, чтобы включить JsonRequestBehavior - который вам потребуется.

Для запросов, которые не соответствуют существующему контроллеру или ресурсу, у вас есть два варианта - отказаться от стандартного универсального маршрута "{controller}/{action}/{id}" и заменить его на тот, который отправляет запрос фиксированному контроллеру, который возвращает это404-подобный ответ, который вы хотите.

Или используйте стандартную обработку ошибок Asp.Net для перенаправления на маршрут, который будет делать то же самое.Лично я предпочитаю это решение, потому что оно означает, что вам не нужно кодировать множество маршрутов в ваш глобальный.

0 голосов
/ 03 марта 2012

Вы можете дать https://github.com/Buildstarted/Errlusion водоворот и создать любую обработку, какую хотите для 404. Вы, вероятно, можете вернуть специальное сообщение ajax, если это запрос ajax, или вернуть html, если это стандартный запрос веб-браузера, если вы 'мне нравится.

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