0

我的工作是在我的应用程序收到请求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请求命中我的控制器,而不会通过GETPOST和拦截PUT并抛出关于其他不匹配路由的错误DELETE

遗憾的是,我需要在 Rails 2.x 中这样做。

4

1 回答 1

2

所以你说

这个 cors 路由,在我的路由文件的顶部,只有在有 OPTIONS 请求(好)或匹配后没有其他路由声明并且该路径上没有静态文件(坏)时才会触发。

您可以在您的最后添加一条路线,该路线routes.rb将匹配其他所有内容并返回 404。

正如您所说,这有点骇人听闻,但我看不到任何其他方法可以在顶部完成您的包罗万象的路线。也许有人会想出别的办法。

于 2013-02-26T00:08:06.167 回答