Merb Router:如何返回406错误

时间:2009-08-26 21:05:24

标签: router merb

是否可以让路由器返回错误代码(或整个机架响应)以响应匹配的路由?

E.g。我已经从WordPress迁移到本土的博客解决方案。搜索引擎正在点击像“/?tag=ruby”这样需要返回406错误的网址。相反,路由器尽职尽责地将它们路由到与“/”相同的位置。我可以匹配我想要删除的URL,但我不知道如何处理它们

1 个答案:

答案 0 :(得分: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块的作用。当请求进入时,我们会引发错误,并且它会被捕获并处理,就像我们从控制器中通过此错误一样。

问题

我原来问题的目标之一是避免不得不经历所有的调度开销。而是通过异常控制器调度此解决方案,该控制器比[406,{'content-type'=>'text/plain},['406 Not Acceptable']]

计算成本更高