我的工作是在我的应用程序收到请求CorsController
时响应跨域 ajax 标头(如果允许) 。OPTIONS
但是因为我不知道该OPTIONS
请求的确切位置,所以我在路由文件的顶部设置了一个包罗万象的路由来捕获OPTIONS
对任何路径的任何请求。
map.cors '*path',
:controller => 'cors',
:action => 'index',
:conditions => { :method => :options }
对于实际OPTIONS
请求,这很好用。当应用程序应该提供404 Not Found
.
现在,当我加载/no/404/for/you
(我的应用程序不处理路由的路径)时会发生什么,我不再得到 404。相反,这条路由被激活,我得到一个405 Method Not Allowed
. 这导致我们的日志充满了并非真正错误的错误,并且监控(如 New Relic)发送有关错误率的恐慌电子邮件,而实际上一切都很好。
似乎看到路径匹配,但:conditions
不匹配,并引发异常。有趣的是,路线处理似乎是一个 2 遍过程。这个 cors 路由,在我的路由文件的顶部,只有在有OPTIONS
请求(好)或匹配后没有其他路由声明并且该路径上没有静态文件(坏)时才会触发。
问题:
我怎样才能让这个包罗万象的路由针对所有OPTIONS
请求命中我的控制器,而不会通过GET
、POST
和拦截PUT
并抛出关于其他不匹配路由的错误DELETE
?
遗憾的是,我需要在 Rails 2.x 中这样做。