我要做的是在我的 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 文档非常缺乏关于使用路由的细节。如果这个问题看起来很简单,请原谅。我确信这是可能的,我只是不知道咒语。