Symfony 3中的405方法不允许。

7

我有一个路由,它是这个样子的

/**
 * @Method({"DELETE"})
 * @Route("/secure/users")
 */

当我尝试使用cUrl时

<html>
    <head>
        <meta charset="UTF-8" />
        <title>An Error Occurred: Method Not Allowed</title>
    </head>
    <body>
        <h1>Oops! An Error Occurred</h1>
        <h2>The server returned a "405 Method Not Allowed".</h2>

        <div>
            Something is broken. Please let us know what you were doing when this error occurred.
            We will fix it as soon as possible. Sorry for any inconvenience caused.
        </div>
    </body>
</html>

我尝试启用了。
Request::enableHttpMethodParameterOverride();

实际上,在 app.dev 和 app_dev.php 中,我可以处理 PUT 请求。


你如何执行请求?实际上,HTTP方法是DELETE吗(从错误消息中看来,似乎您发送了一个不同的HTTP方法的请求)? - xabbuh
1个回答

1
在您的curl请求中添加此参数:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');

或者在命令行中。
curl -X DELETE "http://localhost/secure/users"

如果您正在使用jQuery执行XHR请求,请执行以下操作:
$.ajax({
    url: '/secure/users',
    type: 'DELETE',
    data: { id: resourceToDelete }
    success: function(result) {
        // Do something with the result
    }
});

而对于纯JavaScript:

var req = new XMLHttpRequest();
req.open('DELETE', '/secure/users');
req.setRequestHeader("Content-type", "application/json");
req.send({ id: 'entityIdentifier' });

如果您想通过浏览器访问它或传递查询参数,例如/secure/users?id=x,请使用GET方法:
/**
 * @Method({"GET"})
 * @Route("/secure/users")
 */

查看PUT和DELETE HTTP请求方法的用途是什么?


嗨,我的参数来自查询参数,我需要启用DELETE,因为我仅在测试中使用CURL,但实际上这个调用来自JavaScript。 - monkeyUser
永远不要使用GET来删除服务器上的对象!否则,您可能会想知道为什么有时对象会随机消失(例如,由于浏览器预取这些URL)。如果您不想使用Javascript,请使用POST表单。 - aferber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接