我正在使用Play Framework v2.2.2(scala)并尝试使用400(错误请求)状态执行重定向。
目前,我正在使用反向路由进行重定向,如下所示:
Redirect(Games.Controllers.routes.SportViewController.show)
我希望能够指定重定向的状态。我尝试在调用中添加一个额外的参数,但是我收到了编译错误:
重载的方法值[重定向]无法应用于(play.api.mvc.Call,Int)
在文档中我注意到你可以指定一个具有重定向状态的字符串uri,但是,我真的想继续在我的代码中使用反向路由,而不是在整个地方都有字符串uri值。
Redirect("redirect/path", status = 400)
有关如何使用反向路由完成错误请求(400)重定向的任何想法或建议?我在文档中遗漏了什么吗?有没有完全不同/更好的方法呢?
非常感谢!
提供更多关于我询问具有特定状态的重定向的原因。我正在处理一个表格帖子。在成功的帖子上(例如,用户发布的数据有效),然后重定向到路由X,并且在不成功的帖子上(例如,用户数据丢失或无效),然后重定向到路由Y.在不成功的帖子上,应该是什么状态代码使用
答案 0 :(得分:2)
重定向操作应该用于HTTP规范http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html中定义的3XX重定向。
调用重定向操作时,它将设置Location标头(请参阅14.30位置)以及3xx状态标头。浏览器将尝试从位置标头加载URI作为新请求,因此将使用最终目标的HTTP状态代码。
重定向只能用于
如果您想明确提出400错误,则需要使用BadRequest操作并从您的应用中提供错误页面。
def badAction = BadRequest {
views.html.myError
}
或者,如果您想重定向到外部页面,请保留现有的默认3XX状态
答案 1 :(得分:0)
这是您感兴趣的Redirect
的签名(减去已更改的状态):
def Redirect(call: Call): SimpleResult = Redirect(call.url)
它只是调用另一个执行腿部工作的重载:
def Redirect(url: String, queryString: Map[String, Seq[String]] = Map.empty, status: Int = SEE_OTHER)
因此,我们可以轻松创建自己的重载,使用我们自己的控制器调用上面的重载:
def Redirect(call: Call, status: Int): SimpleResult = Redirect(call.url, Map.empty, status)