玩! 2.0简单的办法,为路由器包罗万象的OPTIONS响应?(Play! 2.0 easy f

2019-10-16 22:24发布

有使Ajax调用简单,因为几乎所有的浏览器,这些天正在一个OPTIONS调用实际AJAX调用服务器之前一些讨厌的问题。

由于我使用的游戏! 2.0,是否有任何方便的方法,使一个通配符响应于使用OPTIONS方法的任何途径?

举例来说,在我的路线做这样的事情: OPTIONS /* controllers.Options.responseDef

是的,我知道,新的游戏! 没有内置的通配符,但需要有因为所有的浏览器越来越多地呼叫选项中AJAX调用之前,此解决方案。

Answer 1:

不太通配符,但你可以使用一个route横跨几个斜线段:

OPTIONS   /*wholepath     controllers.Options.responseDef(wholepath)
OPTIONS   /               controllers.Options.responseDef

它应该符合所有的要求:

OPTIONS    /a
OPTIONS    /a/b
OPTIONS    /a/b/c

注:从我头顶那是,也许你需要把它擦亮。 我不能由我自己现在检查。

检查部分动态部分跨越数/手动的。



Answer 2:

一个很干净的办法有一个单独的控制器端点匹配所有选项的请求是覆盖onRouteRequest的方法Play的全局对象 。 以下版本的onRouteRequest将所有请求路由到单个端点命名OptionsController.options

import play.api.mvc._

...

override def onRouteRequest(request: RequestHeader): Option[Handler] = {
  request.method match {
    case "OPTIONS" => Some(OptionsController.options)
    case _ => super.onRouteRequest(request)
  }
}


文章来源: Play! 2.0 easy fix to OPTIONS response for router catch-all?