間違ったコンテンツタイプでレールがクラッシュするのを避ける方法

私はUbuntu 12.04で3.2.8のレールを使用しています

私はjsonのみのサポートでWebサービスを構築しています。誰かが私にjson以外のデータを送信し、content-typeをapplication/jsonに設定すると、railsアプリケーションは例外を発生させ、500(内部サーバーエラー)を返します。

この例外は、railsがparams構造体を作成しようとしているときにコントローラアクションが呼び出される前に、レール内で発生し、受信データをJSONとして解析します。

私はこれが正しい行動であるとは思わない。私は、例外を救済したかどうかを知っていて、特別なハンドラや変数セットを使って自分のアクション内で私に知らせてもらいました。私は415(サポートされていないメディアタイプ)または422(未処理のエンティティ)を示したいと思います。私の推測はこの場合には422がより適切です。

どのようにこれを達成することができるかについてのアイデア?

3
nl ru de
あなたのアプリをウェブ上に展開する予定の場合は、レール3.2.11にアップグレードすることを忘れないでください。巨大なセキュリティ欠陥が修正されました。
追加された 著者 Intrepidd,
@Intrepidd、チップのおかげで間違いなく
追加された 著者 av501,

1 答え

ミドルウェアを少し変更する必要があると思います。カスタムミドルウェアを作成して ParamsParser の前に挿入するか、 ParamsParser をオーバーライドします。

このリクエストを見てください。 ParamsParser のサンプルがあります>オーバーライド。

カスタムミドルウェアの作成には別の利点があります。データが json でcontent-typeが application/json でない場合は、ここで修正できます()。

1
追加された
ポインタのおかげで、見て戻ってくるだろう
追加された 著者 av501,
カスタムパーサーが唯一の方法であるように見える
追加された 著者 av501,