ルーターが一致したルートに応答してエラー コード (またはラック全体の応答) を返すようにすることは可能ですか?
たとえば、WordPress から自作のブログ ソリューションに移行しました。/?tag=ruby
検索エンジンは、406 エラーを返す必要がある「 」のような URL にアクセスしています。代わりに、ルーターはそれらを ' /
' と同じ場所に忠実にルーティングします
これは明らかではありませんが、効果的です。
match('/',:query_string=>/.+/).defer_to do |request, params|
raise Merb::ControllerExceptions::NotAcceptable,
"Query String Unknown: #{request.query_string}"
end
406エラーをトリガーするには、発生させる必要がありますMerb::ControllerExceptions::NotAcceptable
が、ルートの設定中にこれを実行すると、誰も役に立ちません。代わりに、Merbがリクエストを処理するまで待つ必要があります。これはdefer_to
ブロックが行うことです。リクエストが届くとエラーが発生し、コントローラーからこのエラーを通過した場合と同じようにキャッチされて処理されます。
私の最初の質問の目標の1つは、ディスパッチングのオーバーヘッドをすべて通過する必要がないようにすることでした。代わりに、このソリューションは、より計算コストの高い例外コントローラーを介してディスパッチされます。[406,{'content-type'=>'text/plain},['406 Not Acceptable']]