1

一些 Web 框架提供了使用隐藏表单字段“覆盖”HTTP 方法的可能性:

<form method="POST">
  <input type="hidden" type="_method" value="PUT">
  ...
</form>

是否可以使用Play框架覆盖 HTTP 方法?

4

2 回答 2

4

注意:这仅适用于 Play 1.x。

查看该方法的源代码Router.route(),它使用x-http-method-override查询字符串中的参数。根据这个错误报告,您还应该能够使用 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在控制器中检查以确认。

于 2011-09-17T07:23:06.957 回答
0

在 Play2 中,这是不可能的,创作者表示没有计划支持它。您必须手动拦截请求并通过覆盖来更改 HTTP 方法Global.onRouteRequest

于 2013-12-05T01:50:13.547 回答