Требует ли request.body перемотка перед чтением с помощью Rails 4 и application/json типа контента или есть новый подход?

Когда я отправляю данные в приложение Rails 4 с Content-Type: "application/x-www-form-urlencoded", я могу получить тело запроса с помощью request.body.read

Однако, когда я отправляю данные с Content-Type «application/json», request.body.read пуст, если я сначала не вызову request.body.rewind.

Два вопроса:

1.) Как получить необработанное тело запроса без предварительного вызова перемотки потока?

2.) Можно ли остановить Rails (или Rack) при разборе JSON в теле запроса, когда клиент отправляет application/json типа контента

Обратите внимание, что в Rails 3, как и в Rails 4, проанализированный JSON доступен в параметрах, но request.body.read не требует предварительной перемотки.


person Cameron Walsh    schedule 17.05.2013    source источник


Ответы (3)


Это действительно является ошибкой. Исправление было интегрировано в мастер и предположительно должно появиться в версии 4.0.1.

person colinm    schedule 06.08.2013
comment
Спасибо! уже давно бьюсь головой о стену. - person Ariel Allon; 20.11.2013
comment
Вау, извините за позднее принятие! Я забыл об этом вопросе! - person Cameron Walsh; 02.05.2014

Используйте request.env вместо request.body.read.

person Adrien Lamothe    schedule 10.03.2014

Похоже, это может быть ошибка в ActionDispatch::ParamsParser. Помещение следующего в config/application.rb, казалось, исправило это.

config.middleware.delete ActionDispatch::ParamsParser
person Cameron Walsh    schedule 05.06.2013