Scala &引用;重定向";使用play framework 2.7连接到外部URL

Scala &引用;重定向";使用play framework 2.7连接到外部URL,scala,playframework,Scala,Playframework,我试图重定向到一个附加了一些授权代码的外部URL。我正在使用Scala的play框架中提供的“重定向”功能。但是,不是重定向到提供的URL,而是打印“Ok”中的消息,而不是重定向 我是游戏和Scala的初学者。我的理解是,“行动”应该发出“结果”。此“结果”可以是“确定”或“重定向”。在以下代码中: 1) 如果我没有提到“Ok”,就会出现编译错误 2) 如果我执行下面的代码,它不会被重定向,它只是在“Ok”中打印消息 //这是在控制器内部 //它在routes文件中定义为GET def测试=操作

我试图重定向到一个附加了一些授权代码的外部URL。我正在使用Scala的play框架中提供的“重定向”功能。但是,不是重定向到提供的URL,而是打印“Ok”中的消息,而不是重定向

我是游戏和Scala的初学者。我的理解是,“行动”应该发出“结果”。此“结果”可以是“确定”或“重定向”。在以下代码中: 1) 如果我没有提到“Ok”,就会出现编译错误 2) 如果我执行下面的代码,它不会被重定向,它只是在“Ok”中打印消息

//这是在控制器内部
//它在routes文件中定义为GET
def测试=操作{隐式请求=>
异步的{
等待(userAuth.getAuth())匹配{
case Some(userAuth)如果
val url=
重定向(url)
case uuif标志
val url=
重定向(url)
}
Ok(“Some message”)//如果没有此选项,则会出现错误
}

我假设这是伪代码,因为模式匹配在语法上不正确

您的模式匹配并非详尽无遗。例如:

def test():字符串={
val x=一些(1)
x匹配{
如果y==2=>返回“匹配的1”,则返回案例部分(y)
案例uuIf false==true=>返回“匹配的2”
}
“不匹配”
}
上面的代码将返回
“不匹配”
,因为
1!=2
false!=true
。需要有一个默认情况,否则如果不满足任何指定条件,它将完全忽略模式匹配

在您的情况下,我猜模式匹配中的两个条件都没有得到满足。因此,模式匹配被跳过并
Ok(无论什么)
返回-如果你取出
Ok
,你的应用程序将爆炸,因为
操作
必须返回
结果
。如果你这样写,你的代码也将返回
Ok

def test=Action{implicit request=>
异步的{
等待(userAuth.getAuth())匹配{
如果=>
val url=
重定向(url)
案例uuIf标志=>
val url=
重定向(url)
案例=>
好的(“一些信息”)
}
}
}
而且

此“结果”可以是“确定”或“重定向”

这是不正确的;它不限于两个值。它可以是许多其他的东西,例如
NoContent
创建的
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")
}
}
def测试:Action[AnyContent]=Action.async{implicit request=>
//你的逻辑
异步的{
等待(userAuth.getAuth())匹配{
如果=>
val url=
(重定向(url、映射(“traceid”->Set(“trace”))
案例uuIf标志=>
val url=
(重定向(url、映射(“traceid”->Set(“trace”))
案例=>
好的(“一些信息”)
}
}