"Redirect" 使用 play framework 2.7 到外部 URL
"Redirect" to an external URL using play framework 2.7
我正在尝试重定向到附加了一些授权代码的外部 URL。我正在使用 Scala 的播放框架中使用 "Redirect" 函数。但不是重定向到提供的 URL,而是打印 "Ok" 中的消息,而不是重定向
我是 Play 和 Scala 的初学者。我的理解是 "Action" 应该发送 "Result"。此 "Result" 可以是 "Ok" 或 "Redirect"。在下面的代码中:
1)如果我不提"Ok",就会出现编译错误
2) 如果我执行下面的代码,它不会被重定向,它只是在 "Ok"
中打印消息
// This is inside a controller
// it is defined as a GET in the routes file
def test = Action { implicit request =>
async {
await(userAuth.getAuth()) match{
case Some(userAuth) if <>
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
case _ if flag
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
}
Ok("Some message") // Without this , there is an error
}
我假设这是伪代码,因为模式匹配在语法上不正确...
您的模式匹配并不详尽。例如:
def test(): String = {
val x = Some(1)
x match {
case Some(y) if y == 2 => return "matched 1"
case _ if false == true => return "matched 2"
}
"matched nothing"
}
上面的代码将 return "matched nothing"
,因为 1 != 2
和 false != true
。需要有默认情况,否则如果不满足任何指定条件,它将完全忽略模式匹配。
对于您的情况,我猜测您的模式匹配中的两个条件都没有得到满足。因此,模式匹配被跳过并且 Ok(whatever)
被 returned - 如果你取出 Ok
,你的应用程序将会崩溃,因为 Action
必须return一个Result
。如果你这样写,你的代码也会 return Ok
:
def test = Action { implicit request =>
async {
await(userAuth.getAuth()) match{
case Some(userAuth) if <> =>
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
case _ if flag =>
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
case _ =>
Ok("Some message")
}
}
}
此外,
This "Result" can either be "Ok" or a "Redirect"
这不是真的;它不仅限于两个值。它可以是许多其他东西,例如 NoContent
、Created
、BadRequest
、InternalServerError
等(基本上是任何有效的 HTTP 状态)。
您可以尝试以下方法:
def test: Action[AnyContent] = Action.async { implicit request =>
//your logic
async {
await(userAuth.getAuth()) match{
case Some(userAuth) if <> =>
val url = <FunctionReturnsUrlwithcode>
(Redirect(url, Map("traceid"-> Set("trace")))
case _ if flag =>
val url = <FunctionReturnsUrlwithcode>
(Redirect(url, Map("traceid"-> Set("trace")))
case _ =>
Ok("Some message")
}
}
我正在尝试重定向到附加了一些授权代码的外部 URL。我正在使用 Scala 的播放框架中使用 "Redirect" 函数。但不是重定向到提供的 URL,而是打印 "Ok" 中的消息,而不是重定向
我是 Play 和 Scala 的初学者。我的理解是 "Action" 应该发送 "Result"。此 "Result" 可以是 "Ok" 或 "Redirect"。在下面的代码中: 1)如果我不提"Ok",就会出现编译错误 2) 如果我执行下面的代码,它不会被重定向,它只是在 "Ok"
中打印消息// This is inside a controller
// it is defined as a GET in the routes file
def test = Action { implicit request =>
async {
await(userAuth.getAuth()) match{
case Some(userAuth) if <>
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
case _ if flag
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
}
Ok("Some message") // Without this , there is an error
}
我假设这是伪代码,因为模式匹配在语法上不正确...
您的模式匹配并不详尽。例如:
def test(): String = {
val x = Some(1)
x match {
case Some(y) if y == 2 => return "matched 1"
case _ if false == true => return "matched 2"
}
"matched nothing"
}
上面的代码将 return "matched nothing"
,因为 1 != 2
和 false != true
。需要有默认情况,否则如果不满足任何指定条件,它将完全忽略模式匹配。
对于您的情况,我猜测您的模式匹配中的两个条件都没有得到满足。因此,模式匹配被跳过并且 Ok(whatever)
被 returned - 如果你取出 Ok
,你的应用程序将会崩溃,因为 Action
必须return一个Result
。如果你这样写,你的代码也会 return Ok
:
def test = Action { implicit request =>
async {
await(userAuth.getAuth()) match{
case Some(userAuth) if <> =>
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
case _ if flag =>
val url = <FunctionReturnsUrlwithcode>
Redirect(url)
case _ =>
Ok("Some message")
}
}
}
此外,
This "Result" can either be "Ok" or a "Redirect"
这不是真的;它不仅限于两个值。它可以是许多其他东西,例如 NoContent
、Created
、BadRequest
、InternalServerError
等(基本上是任何有效的 HTTP 状态)。
您可以尝试以下方法:
def test: Action[AnyContent] = Action.async { implicit request =>
//your logic
async {
await(userAuth.getAuth()) match{
case Some(userAuth) if <> =>
val url = <FunctionReturnsUrlwithcode>
(Redirect(url, Map("traceid"-> Set("trace")))
case _ if flag =>
val url = <FunctionReturnsUrlwithcode>
(Redirect(url, Map("traceid"-> Set("trace")))
case _ =>
Ok("Some message")
}
}