Как избежать рельсов от сбоев при неправильном типе контента

Я использую рельсы 3.2.8 на Ubuntu 12.04

Я создаю веб-сервис с поддержкой только json. Теперь, если кто-то отправляет мне данные, которые не являются json, но устанавливает тип контента в application/json, приложение rails вызывает исключение и возвращает 500 (внутренняя ошибка сервера).

Это исключение происходит в рельсах до того, как действие контроллера вызвано как rails пытается создать структуру params и проанализировать входящие данные как JSON.

Я не уверен, что это правильное поведение. Я бы предпочел, избавил ли это исключение и сообщит мне в каком-то специальном обработчике или в моем действии с некоторым набором переменных. Я бы хотел указать 415 (неподдерживаемый тип носителя) или 422 (необработанный объект). Мое предположение - 422, более уместно в этом случае.

Любые идеи о том, как это можно сделать?

3
nl ja de
Если вы планируете развертывать свое приложение в Интернете, не забудьте обновить до рельсов 3.2.11, исправлен огромный недостаток безопасности.
добавлено автор Intrepidd, источник
@Intrepidd, спасибо за подсказку, безусловно, сделают
добавлено автор av501, источник

1 ответы

Угадайте, что вам нужно немного изменить промежуточное ПО. Создайте собственное промежуточное программное обеспечение и вставьте его перед ParamsParser или переопределите ParamsParser .

Взгляните на запрос , есть образец ParamsParser переопределение.

Еще одно преимущество создания пользовательского middlevare: если данные json , но content-type не является application/json , вы можете исправить его здесь ( пример ).

1
добавлено
спасибо за указатели, посмотрим и вернемся
добавлено автор av501, источник
Похоже, что пользовательский парсер - единственный способ
добавлено автор av501, источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff