我有一个CorsController
,只要我的应用程序收到OPTIONS
请求,它就会响应跨域ajax标头(如果Origin是允许的话)。但是因为我不确切知道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
请求(好)或者在匹配后没有其他路由声明并且该路径上没有静态文件(坏)时才会触发。 / p>
问题:
如何通过OPTIONS
,GET
{{} {{{{} {{{}} {{}} {{{{ {1}}和POST
?
我很遗憾地想在Rails 2.x中做到这一点。
答案 0 :(得分:2)
所以你说
此路径文件顶部的此cors路由仅在有OPTIONS请求(好)或匹配后没有其他路由声明时触发,并且没有静态文件路径(坏)。
您可以在routes.rb
的最后添加一条与其他内容匹配的路线,然后返回404。
正如你所说的那样,它有点hacky,但我没有看到任何其他方法在顶部完成你的 catchall route 。也许有人会想出别的东西。