我正在使用Play 2.2.1,我试图编写自己的Action来处理CORS请求。我发现this,但不幸的是它不能编译。用Play's EssentialAction创作
仅供参考这里的(略有修改)代码:
import play.api.mvc._
import scala.concurrent.ExecutionContext
case class CorsAction(action: EssentialAction) extends EssentialAction {
def apply(request: RequestHeader) = {
implicit val executionContext: ExecutionContext = play.api.libs.concurrent.Execution.defaultContext
val origin = request.headers.get("Origin").getOrElse("*")
if (request.method == "OPTIONS") {
val cors = Action { request =>
Ok("").withHeaders(
"Access-Control-Allow-Origin" -> origin,
"Access-Control-Allow-Methods" -> "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers" -> "Accept, Origin, Content-type, Authorization, X-Auth-Token, " +
"X-HTTP-Method-Override, X-Json, X-Prototype-Version, X-Requested-With",
"Access-Control-Allow-Credentials" -> "true",
"Access-Control-Max-Age" -> (60 * 60 * 24 * 30).toString)
}
cors(request)
} else {
action(request).map(res =>
res.withHeaders(
"Access-Control-Allow-Origin" -> origin,
"Access-Control-Allow-Credentials" -> "true"
))
}
}
}
的错误是:
Cors.scala:13: not found: value Ok
我很新的Scala和更是如此玩!并无法弄清楚发生了什么。据我所知我有使用EssentialAction,而不仅仅是行动B/C我想要的请求的标题。到目前为止,我发现的所有例子都只涉及Action。
这应该POST请求也行 - 正确的吗?获取用于POST端点的预检请求的404 – smk