我有一种情况,我想验证每个请求都具有有效的标头属性。此属性是一个数字签名,本质上是请求url和请求正文的哈希,在这种情况下为表单url编码的正文。
所以我做了典型的事情,并创建了一个动作过滤器,如下所示:
class SomeActionFilter @Inject()(val executionContext: ExecutionContext) extends ActionFilter[Request] {
override protected def filter[A](request: Request[A]): Future[Option[Result]] = Future.successful {
// here I want to get the request body which I know is a form url encoded request body
val body = request.body //problem here is that body is of type A
}
}
我真正想要的是使request.body成为Option [Map [String,Seq [String]]]]类型,这是一种形式url编码的正文。我可以做到这一点,即像这样用AnyContent交换类型参数A,然后我就可以得到一个request.body.asFormUrlEncoded
class SomeActionFilter @Inject()(val executionContext: ExecutionContext) extends ActionFilter[Request] {
override protected def filter[AnyContent](request: Request[AnyContent]): Future[Option[Result]] = Future.successful {
encoded request body
val body = request.body.asFormUrlEncoded
}
}
在这里要做这样的事情来交换类型参数是否正确?还是我使用asInstanceOf检查主体是否为Option [Map [String,Seq [String]]]类型,如果不是,则拒绝请求?我对如何解决这个问题感到迷茫。