0

我要做的是在我的 Play 2.1 应用程序中建立对 CORS 的支持。前提是 /admin 路径上的任何内容都需要在响应中获取 CORS 标头。这与我通过 StackOverflow 拼凑起来的剪切和粘贴解决方案配合得很好。我的每个控制器操作都利用一个包装的操作,将 CORS 标头推入响应中。问题是我的幼稚实现现在对路由文件中不存在的 URL 的 OPTIONS 请求返回 200 OK!如何修改我的幼稚控制器以确认我的路由文件中存在 URL,如果我没有找到路由,则 404 Not Found?

配置/路由

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                           controllers.Application.index
GET     /hb                         controllers.Application.hb

# Admin API
POST    /admin/sessions             controllers.admin.Sessions.session
GET     /admin/apps                 controllers.admin.Apps.index
OPTIONS /admin/*url                 controllers.admin.Admin.options(url: String)

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)

My Admin Controller 提供常用选项处理

object Admin extends Controller {
  val log = LoggerFactory.getLogger(getClass())

  def options(url: String) = CORS_Writer {
    Action {
      log.trace("options( url: {}", url);
      /*
       * I need to validate that url exists in the routes file here
       * (this doesn't compile, but conceptually is what I want).
       */
       if(routes(url)) { Ok } else { NotFound }
    }
  }
}

我预计

OPTIONS /admin/sessions HTTP/1.1
HTTP/1.1 200 OK

OPTIONS /admin/sessions HTTP/1.1
HTTP/1.1 200 OK

OPTIONS /admin/bob HTTP/1.1
HTTP/1.1 404 Not Found

我是 Scala 和 Play 的新手,我发现 Play 2.1 文档非常缺乏关于使用路由的细节。如果这个问题看起来很简单,请原谅。我确信这是可能的,我只是不知道咒语。

4

1 回答 1

0

普通onHandlerNotFound还不够好吗?

您可以对以/admin/.

于 2013-05-30T07:30:33.717 回答