某些Web框架提供了使用隐藏表单字段“覆盖”HTTP方法的可能性:
<form method="POST">
<input type="hidden" type="_method" value="PUT">
...
</form>
是否可以使用Play框架覆盖HTTP方法?
答案 0 :(得分:4)
注意:这仅适用于Play 1.x.
查看Router.route()
方法的source code,它使用查询字符串中的x-http-method-override
参数。根据{{3}},您还应该能够使用HTTP标头实现此目的,但我在源代码中看不到这一点。
要使其工作,您需要将覆盖添加到请求字符串。我运行了以下示例以使其工作。
<form action="@{Application.form}?x-http-method-override=PUT" method="POST">
<input type="submit" type="go" value="go">
</form>
如果将日志记录级别设置为TRACE,您将看到以下输出,显示方法已更改。您应该看到类似 -
的输出08:20:34,855 TRACE ~ init: begin
08:20:34,858 TRACE ~ Route: /application/form - x-http-method-override=PUT
08:20:34,859 TRACE ~ request method POST overriden to PUT
08:20:34,860 TRACE ~ ------- public static void controllers.Application.form()
08:20:34,861 TRACE ~ init: end true
您还可以检查控制器中的request.method
进行确认。
答案 1 :(得分:0)
在Play2中,这是不可能的,创作者have indicated没有计划支持它。您必须通过覆盖Global.onRouteRequest
来手动拦截请求并更改HTTP方法。