【问题标题】:Merb Router: how to return a 406 errorMerb 路由器:如何返回 406 错误
【发布时间】:2009-08-26 21:05:24
【问题描述】:

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

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

【问题讨论】:

    标签: router merb


    【解决方案1】:

    这不是很明显,但是很有效。

    解决办法:

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

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多