Использование Scala и Play 2.5.10 я реализовал следующие многоразовые действия для состава и с целью отключения кэширования в браузере, изменив заголовки ответа:Play 2.5.x Как изменить заголовки содержимого ответа, т. Е. Без кеша?
import play.api.http.HeaderNames
import play.api.mvc._
import scala.concurrent.Future
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global
case class NoCache[A](action: Action[A]) extends Action[A] with HeaderNames {
def apply(request: Request[A]): Future[Result] = {
action(request).andThen {
case Success(result) => result.withHeaders(
(CACHE_CONTROL -> "no-cache, no-store, must-revalidate"),
(PRAGMA -> "no-cache"),
(EXPIRES -> "0")
)
case Failure(result) => result
}
}
lazy val parser = action.parser
}
Я тогда повторно использовать его в своих реализациях действий контроллера, как это:
def link = NoCache {
deadbolt.SubjectPresent()() { implicit request =>
Future {
Ok(views.html.account.link(userService, auth))
}
}
}
I останова в NoCache
реализации и она будет выполнена правильно, однако, используя Web Developer Firefox plugin для мониторинга сетевого трафика, я вижу, что заголовки ответа не содержат «нет кэша» модификации ... что Я делаю Неправильно?
удалить 'andThen' и заменить его' map' – pamu
Вот исправленный код 'случай класса NoCache [A] (действие: Действие [A]) распространяется действие [A] с HeaderNames { Защиту применить (запрос: Request [A]): Future [Result] = { action (request) .map {result => result.withHeaders ( (CACHE_CONTROL -> "no-cache, no-store, must-revalidate"), (Прагма -> "нет кэша"), (EXPIRES -> "0") ) }} ленивых вал парсера = action.parser } ' – pamu