Mat*_*ias 10 playframework playframework-2.2
我有一个登录路由,应该将其输入参数作为POST变量传输.我已经定义了这样的路线:
POST /v1/accounts/login controllers.v1.Accounts.login(username: String, password: String)
Run Code Online (Sandbox Code Playgroud)
我的控制器是这样的:
object Accounts extends Controller {
def login(username: String, password: String) = Action {
Ok("Foo " + username)
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用Chromes Advance REST Client测试此路由时,它仅适用于GET参数,而不是我将其作为application/x-www-form-urlencodedPOST表单数据发送.
该播放Framework文档实际上从未提到POST参数,但它也没有说,这是行不通的.
我认为如果我创建一个Form并将我的请求绑定到那个可能会让它工作,但这似乎是不必要的复杂.
是否真的没有办法使用routes文件绑定POST参数?
bie*_*ior 19
Route =解析URL内的params =通过GET发送params.
这意味着,你正试图发送POST请求...... GET params ......哪里有意义?
James Roper解释说:
在路由时,Play尚未使用请求正文,因此未解析提交的表单. - 并且你也不想要它,因为你的行动决定了请求体如何被解析,流式传输,发送到其他地方,如果Play在路由时这样做,它将限制你在行动中可以做的事情.
从安全的角度来看,将凭据留在客户端路径中的每台机器的日志中绝对是个坏主意.
相反,您应该使用基本表单文档中描述的常见表单处理方式:
路线:
POST /v1/accounts/login controllers.v1.Accounts.login
Run Code Online (Sandbox Code Playgroud)
行动:
val userForm = Form(
tuple(
"username" -> text,
"password" -> text
)
)
def login = Action { implicit request =>
val (username, password) = userForm.bindFromRequest.get
Ok("Hello " + username + ", you're trying to login with: " + password)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14836 次 |
| 最近记录: |