Текст вопроса / фона и находки
Мой браузер отправляет некоторый HTTP-заголовок (например, реферер) моему приложению, которое я создаю в рамках платформы Play 2.0. Я совершенно не понимаю, как их читать, чтобы я мог передать их (Google не помогает).
Я думаю Возможно, мне нужно сделать что-то, упомянутое здесь (http://www.playframework.org/documentation/2.0/ScalaInterceptors). Что привело к:
override def onRouteRequest(request: RequestHeader): Option[Handler] = {
println("headers:" + request.headers.toString)
super.onRouteRequest(request)
}
Который работает вывод на консоль. Но я не знаю, как передать их конкретному действию контроллера. Я мог бы, например, добавить оператор if
и вызвать myAction
, как только он увидит определенный «маршрут» (например, / client / view / 123), или вызвать super.onRouteRequest(request)
в противном случае. Но я потерял бы функциональность в моем /conf/routing
. Каков «правильный» способ сделать это?
В моем задании ответить, что я нашел это : Http.Context.current().request()
, но использование этого в моем действии контроллера дало мне [RuntimeException: There is no HTTP Context available from here.]
.
Еще одна вещь, которую я нашел, это это , где Гийом Борт отвечает, я думаю несвязанный вопрос:
I'm not sure what you are trying to do but:
case class CustomRequest(token: String, request: Request[AnyContent])
extends WrappedRequest(request)
case class CustomAction(f: CustomRequest => Result)
extends Action[AnyContent] {
lazy val parser = BodyParsers.parse.anyContent
def apply(req: Request[AnyContent]) = req match {
case r: CustomRequest => f(r)
case _ => sys.error("Invalid usage")
}
}
object Application extends Controller {
def index = CustomAction { request =>
Ok("Token: " + request.token)
}
}
With onRouteRequest:
override def onRouteRequest(req: RequestHeader) = {
super.onRouteRequest(req).map { _ match {
case a: CustomAction => Action { (request: Request[AnyContent]) =>
a(CustomRequest("XXX", request))
}
case o => o
}
}
}
Но это немного над моей головой (и, возможно, даже не ответом на мой вопрос). Но если это путь, дайте мне знать.
Вопрос обобщен
Каким будет правильный / хороший способ чтения заголовков HTTP, отправленных браузером в действии контроллера? Мне нужен / нужен только заголовок HTTP в нескольких маршрутах.
Спасибо за любые указатели или подталкивания!
PS:
1) Я новичок в scala и play (и разработке в сети через рельсы, такие как фреймворки), поэтому я приношу свои извинения за любые ошибки в lingo (скажу).
2) Впервые в stackoverflow ... но это выглядит потрясающе, надеюсь, я сделал все в порядке для моего первого вопроса здесь!
3) У меня было 5 ссылок / находок, но нет репутации, чтобы позволить это, поэтому я сузил свой вопрос до 3-х интересных веб-поиска, извините.