0

ルーターが一致したルートに応答してエラー コード (またはラック全体の応答) を返すようにすることは可能ですか?

たとえば、WordPress から自作のブログ ソリューションに移行しました。/?tag=ruby検索エンジンは、406 エラーを返す必要がある「 」のような URL にアクセスしています。代わりに、ルーターはそれらを ' /' と同じ場所に忠実にルーティングします

4

1 に答える 1

0

これは明らかではありませんが、効果的です。

解決:

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']]

于 2009-08-27T02:10:34.250 に答える